【发布时间】:2016-10-14 12:59:15
【问题描述】:
我正在尝试定义一个单例别名方法。 如:
name = 'Bob'
# I want something similar to this to work
name.define_singleton_method(:add_cuteness, :+)
name = name.add_cuteness 'by'
我确定我可以将方法对象作为第二个参数传递。
我不想这样做
name.define_singleton_method(:add_cuteness) { |val| self + val }
我想给String#+ 方法加上别名,不要使用它。
强调别名,但将实际方法对象作为第二个参数发送也很酷。
【问题讨论】:
-
你不能
define_singleton_method在 Integer 上它是不可变的 -
@bjhaid 是真的。我把它改成了
String -
name = 'Bob'; name.define_singleton_method(:add_cuteness, &name.method(:+)); name = name.add_cuteness 'by' #=> 'Bobby'这是你想要的吗? -
我知道我可以将该方法作为第二个参数发送。这很可能是我将使用的,但是我接受了@ndn 的回答,因为它使用了实际的别名和很好的解释。
-
&name.method(:+)在技术上是不正确的,因为&是to_proc的语法糖。所以它将String#+转换为类似于{ |val| self + val }的东西,这是我想要避免的。
标签: ruby singleton metaprogramming