Tag: 委托

我可以使用Forwardable在Ruby中委托一个常量吗?

鉴于以下类: 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的常数? 我试过像这样扩展SingleForwardable (参见这里的文档): class Other extend SingleForwardable def initialize @thing = Thing.new end def method puts CONSTANT end def_single_delegator :@thing, :CONSTANT end 和: def_single_delegator :@thing, :constant 但是没有用,我的语法错了吗? 如果没有,还有另一种方式吗?

rails委托方法如何工作?

在阅读了下面的jvans的答案后,再看一下源代码,我现在得到它:)。 如果有人仍然想知道rails委员会的工作原理。 所有rails都在创建一个新方法,在您运行委托方法的文件/类中使用(module_eval)。 例如: class A delegate :hello, :to => :b end class B def hello p hello end end 在委托被调用时,rails将在类A中创建一个带有(* args,&block)的hello方法(技术上在写入类A的文件中),并且在该方法中,所有rails都使用“:to”值(应该是已经在类A中定义的对象或类)并将其分配给局部变量_,然后只调用该对象上的方法或传递参数的类。 因此,为了让代表在不引发exception的情况下工作……使用我们之前的示例。 A的实例必须已经有一个引用类B实例的实例变量。 class A attr_accessor :b def b @b ||= B.new end delegate :hello, :to => :b end class B def hello p hello end end 这不是关于“如何在rails中使用委托方法”的问题,我已经知道了。 我想知道“委托”如何代表方法:D。 在Rails 4中,源代码委托在核心Ruby Module类中定义,这使得它可以在所有rails应用程序中作为类方法使用。 实际上我的第一个问题是如何包含Ruby的Module类? 我的意思是每个Ruby类都有> […]