我想知道是否可以在包含相同模块的类之间创建共享变量:
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"
答案 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"