“self.included?”在Ruby中

时间:2011-04-29 04:13:59

标签: ruby

在以下代码中,

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为零?

2 个答案:

答案 0 :(得分:4)

运行print时,会打印@connection实例的实例变量ModuleTest。您的代码中有两个其他位置引用@connection,但是这些位置指向@connection类的实例ModuleTest的实例变量Class,并且是另一回事

此外,即使后者@connectionModuleTest类的一个)在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

的问题:

  1. 回调是包含而没有
  2. 在类方法中,使用类变量比使用实例变量更有意义