ruby中的共享模块变量

时间:2014-04-15 16:17:03

标签: ruby

我想知道是否可以在包含相同模块的类之间创建共享变量:

module Module1

  @@shared

  class NestedClass1

   def initialize
     @@shared = "hello world"
   end

   def foo
     p @@shared
   end

  end

end

module Module1

  class NestedClass2

     def bar
       p @@shared
     end

  end
end

foo = Module1::NestedClass1.new
bar = Module1::NestedClass2.new

foo.bar
# => "hello world"
bar.bar
# => "hello world"

1 个答案:

答案 0 :(得分:0)

您正在混淆命名空间并包含模块。如果实际包含共享模块,并且实际初始化类变量,则可以共享类变量。如果未使用未定义的方法 NestedClass1#bar但使用已定义的方法NestedClass1#foo,则不会导致错误。

module Module1
  @@shared = nil
end

class NestedClass1
  include Module1
  def initialize
    @@shared = "hello world"
  end
  def foo
    p @@shared
  end
end

class NestedClass2
  include Module1
  def bar
    p @@shared
  end
end

NestedClass1.new.foo # => "hello world"
NestedClass2.new.bar # => "hello world"