我试图在一个类中包含一个模块中的方法,并让包含的方法访问正在执行包含的基类的类变量,但它不像我假设的那样工作。代码:
class Awesome
@@name = "ME!"
end
module MyGem
module Namespace
def typist
puts @@name
end
end
end
if defined? Awesome
Awesome.class_eval do
include MyGem::Namespace
end
end
Awesome.new.typist # Test our new 'injected' instance method!
#=> NameError: uninitialized class variable @@name in MyGem::Namespace
显然,我对 Rubyinclude
行为的理解是不可靠的,我认为 include 会将方法合并到基类中,并且执行上下文将是基类,但错误消息似乎暗示包含方法的执行上下文在原始方法的模块。
那么我怎样才能实现我想要做的,如我的代码片段中所示?请注意,我非常乐意将类变量替换为任何其他实现,例如使用实例变量,或者使其工作所需的任何实现:)。