【发布时间】:2015-02-07 03:46:42
【问题描述】:
Ruby 有如此漂亮的语法糖,我确信这会起作用:
f = :+
g = 1 f 2 // => 3
但是,当然不是。
有没有类似的?显然有很多简单的方法可以解决这个问题,但是 Ruby 对神奇糖的承诺是否延伸到做这样的事情?
【问题讨论】:
Ruby 有如此漂亮的语法糖,我确信这会起作用:
f = :+
g = 1 f 2 // => 3
但是,当然不是。
有没有类似的?显然有很多简单的方法可以解决这个问题,但是 Ruby 对神奇糖的承诺是否延伸到做这样的事情?
【问题讨论】:
是的,您可以使用Object#public_send 方法:
f = :+
puts 1.public_send(f, 2) # => 3
来自文档:
调用由符号标识的方法,将任何指定的参数传递给它。与#send 不同,#public_send 仅调用公共方法。
【讨论】:
public_send 的原因,除非你特别想绕过可见性。