给定一个类:
EXEC prInsertPrice 'N01', 20000, @date, null
另一个像:
class Thing
CONSTANT = 10
# other code
end
是否可以将class Other
def initialize
@thing = Thing.new
end
def method
puts CONSTANT
end
end
扩展为Forwardable
Other
委托给CONSTANT
的常量?
我尝试过扩展Thing
(请参阅文档here),如下所示:
SingleForwardable
和
class Other
extend SingleForwardable
def initialize
@thing = Thing.new
end
def method
puts CONSTANT
end
def_single_delegator :@thing, :CONSTANT
end
但是没有用,我的语法错了吗?如果没有,还有另一种方式吗?
答案 0 :(得分:1)
Forwardable(和SingleForwardable)允许您通过模块向当前类添加类函数。编写委托人时,您需要指定从原始模块传递给接收对象的方法。
在您的示例中,def_single_delegator :@thing, :CONSTANT
被解释为以下内容:定义委托给访问者:CONSTANT
的方法:@thing
(即它在访问者中调用相同名称的方法)。
正如您所看到的,这不是传递常量的值,而是传递与常量同名的方法。如果你想传递与常量相同的值,你可以提供一个访问器方法,它返回原始常量的值,以便你可以在这个类中赋值。
答案 1 :(得分:0)
这个问题由the documentation (bold emphasis mine)回答:
def_single_delegator(accessor, method, new_name=method)
定义方法 方法,该方法委派给访问者(即调用同名方法 存取)。如果提供了 new_name ,则将其用作委托方法的名称。
所以,不,你只能委派消息发送,而不是不断的查找。