是否可以将算术运算符(*、+、-、/)作为参数传递给 ruby 方法?我已经看到这是在 C++ 中执行的。rails 有类似的功能吗?
def calculate(operator)
1254 operator 34
end
puts calculate(+)
是否可以将算术运算符(*、+、-、/)作为参数传递给 ruby 方法?我已经看到这是在 C++ 中执行的。rails 有类似的功能吗?
def calculate(operator)
1254 operator 34
end
puts calculate(+)
使用Object#send
:
def calculate(op)
1254.send(op, 34)
end
puts calculate(:+)
这适用于任何方法,包括定义的算术运算符。请注意,您需要将方法名称作为符号或字符串发送。
你可以使用一个块,并做类似的事情
def calculate
yield 1254,34
end
calculate &:+ # => 1288
操作员对消息进行脱糖。因此,您可以传递一个符号来命名您要发送的消息。
def calculate(operator)
1254.send(operator, 34)
end
# to call:
puts calculate(:+)
请注意,当然,这将允许您调用任何方法,因此,如果您在执行此类操作时要接受用户输入,通常需要将其列入白名单。
Object#send
您可以使用orObject#public_send
方法实现此目的:
def calculate(operator)
# specify accepted operators here:
raise ArgumentError unless [:*, :+, :-, :/].include? operator.to_sym
1254.public_send(op, 34)
end