将算术运算符作为参数传递给rails方法?

时间:2013-06-20 19:09:58

标签: ruby-on-rails ruby ruby-on-rails-3

是否可以将算术运算符(*,+, - ,/)作为参数传递给ruby方法?我已经看到这在C ++中执行。轨道能够类似吗?

def calculate(operator)
   1254 operator 34
end

puts calculate(+)

4 个答案:

答案 0 :(得分:6)

您可以使用块,并执行类似

的操作
def calculate
  yield 1254,34
end
calculate &:+ # => 1288

答案 1 :(得分:5)

使用Object#send

def calculate(op)
  1254.send(op, 34)
end

puts calculate(:+)

这适用于任何方法,包括定义的算术运算符。请注意,您需要将方法名称作为符号或字符串发送。

答案 2 :(得分:4)

操作员不喜欢消息。因此,您可以传递一个符号来命名您要发送的邮件。

def calculate(operator)
    1254.send(operator, 34)
end

# to call:
puts calculate(:+)

当然,请注意,这将允许您调用任何方法,因此,如果您在执行此类操作时将接受用户输入,则通常会想要列入白名单。

答案 3 :(得分:2)

您可以使用Object#sendObject#public_send方法实现此目的:

def calculate(operator)
  # specify accepted operators here:
  raise ArgumentError unless [:*, :+, :-, :/].include? operator.to_sym
  1254.public_send(op, 34)
end