【发布时间】:2013-11-29 22:38:35
【问题描述】:
我有一个数组
operator = ['+', '-', '*', '/']
我想用它们以 4 种不同的方式求解方程。我想它会是这样的:
operator.map {|o| 6 o.to_sym 3 } # => [9, 3, 18, 2]
我该怎么做?
【问题讨论】:
我有一个数组
operator = ['+', '-', '*', '/']
我想用它们以 4 种不同的方式求解方程。我想它会是这样的:
operator.map {|o| 6 o.to_sym 3 } # => [9, 3, 18, 2]
我该怎么做?
【问题讨论】:
使用Object#public_send方法如下:
operator = ['+', '-', '*', '/']
operator.map {|o| 2.public_send o,2 }
# => [4, 0, 4, 1]
使用Object#method 和Method#call 的另一种方式:
operator = ['+', '-', '*', '/']
operator.map {|o| 2.method(o).(2) }
# => [4, 0, 4, 1]
【讨论】:
另一种方法是使用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]
【讨论】: