【发布时间】:2011-09-26 00:37:22
【问题描述】:
包含模块如何影响范围?具体来说,在这个例子中:
module ModuleA
class ClassA
def initialize
puts "test passed"
end
end
end
module ModuleB
include ModuleA
# test 1
C = ClassA.new
class ClassB
def initialize
c = ClassA.new
end
end
end
# test 2 and 3 fail without this
#include ModuleB
module ModuleC
# this doesn't help
include ModuleB
# test 2
ClassB.new
# test 3
ModuleB::ClassB.new
end
test 1 工作正常,但 test 2 和 test 3 失败,没有注释掉 import ModuleB。
- 为什么
ClassA在ModuleB(测试1)的范围内,但不在ClassB范围内? - 为什么
import ModuleB将ClassA带入ClassB的范围内?
【问题讨论】:
-
要使 test2 和 test3 工作,您需要在
ClassB中包含ModuleA或制作ClassB < ClassA和superinitialize.