使用 Ruby 将运算符存储在变量中

Store an operator in a variable with Ruby

Ruby 有如此漂亮的语法糖,我确信这会起作用:

f = :+
g = 1 f 2 // => 3

但是,当然不是。

有类似的吗?显然有很多简单的方法可以解决这个问题,但是 Ruby 对神奇糖的承诺是否延伸到做这样的事情?

是的,您可以使用 Object#public_send 方法:

f = :+
puts 1.public_send(f, 2) # => 3

来自文档:

Invokes the method identified by symbol, passing it any arguments specified. Unlike #send, #public_send calls public methods only.