在以下代码中,
module Test
@connection = nil
def self.included?(base)
@connection = base
end
def print
puts @connection
end
end
class ModuleTest
include Test
end
m = ModuleTest.new
m.print
打印时为什么@connection
为零?
答案 0 :(得分:4)
运行print
时,会打印@connection
实例的实例变量ModuleTest
。您的代码中有两个其他位置引用@connection
,但是这些位置指向@connection
类的实例ModuleTest
的实例变量Class
,并且是另一回事
此外,即使后者@connection
(ModuleTest
类的一个)在base
之前也不会得到其值included?
。
默认情况下,ModuleTest
创建的nil
实例的实例变量在puts
内由print
调用时初始化为{{1}}。
答案 1 :(得分:4)
几乎是正确的,经过几次调整就可以了:
module Test
def self.included(base)
@@connection = base
end
def print
puts @@connection
end
end
class ModuleTest
include Test
end
ModuleTest.new.print
的问题: