2015-02-07 42 views
2

红宝石变量的运营商有这样漂亮的语法糖,我确信这会工作:商店在使用Ruby

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

但是,当然,它没有。

是否有类似的东西?显然有很多简单的方法需要做到这一点,但是Ruby对于神奇糖的承诺是否延伸到做这样的事情?

回答

3

呀,你可以用Object#public_send方法,这样做:

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

从文档:

调用由符号标识的方法,通过它指定的任何参数。与#send不同,#public_send仅调用公共方法。

+0

“它绕过可见性检查” - 这就是为什么你使用'public_send',除非你特别想要规避可视性。 – 2015-02-07 11:08:38

+0

谢谢@JörgWMittag,我不知道这个模拟,更新的答案 – 2015-02-07 15:33:36