【问题标题】:Ruby string to operatorRuby 字符串到运算符
【发布时间】:2013-11-29 22:38:35
【问题描述】:

我有一个数组

operator = ['+', '-', '*', '/']

我想用它们以 4 种不同的方式求解方程。我想它会是这样的:

operator.map {|o| 6 o.to_sym 3 } # => [9, 3, 18, 2]

我该怎么做?

【问题讨论】:

    标签: ruby string operators


    【解决方案1】:

    使用Object#public_send方法如下:

    operator = ['+', '-', '*', '/']
    operator.map {|o| 2.public_send o,2 }
    # => [4, 0, 4, 1]
    

    使用Object#methodMethod#call 的另一种方式:

    operator = ['+', '-', '*', '/']
    operator.map {|o| 2.method(o).(2) }
    # => [4, 0, 4, 1]
    

    【讨论】:

      【解决方案2】:

      另一种方法是使用try。可能首选 try 的原因是 try 是 send 的更具防御性的版本。

      def try(*a, &b)
        if a.empty? && block_given?
          yield self
        else
          __send__(*a, &b)
        end
      end
      

      使用try 执行此操作将如下所示:

      operator = ['+', '-', '*', '/']
      val_to_be_operated = nil
      
      operator.map { |v| val_to_be_operated.try(v, 2) } 
      # => [nil, nil, nil, nil]
      operator.map { |o| val_to_be_operated.method(o).(2) } 
      # Error
      
      val_to_be_operated = 2 
      operator.map { |v| val_to_be_operated.try(v, 2) }
      # => [4, 0, 4, 1]
      

      【讨论】:

        猜你喜欢
        • 2019-07-25
        • 1970-01-01
        • 2015-02-08
        • 2019-09-18
        • 2013-09-16
        • 2020-02-02
        • 2013-04-09
        • 2011-02-14
        • 1970-01-01
        相关资源
        最近更新 更多