我正在尝试使用Ruby include
关键字,如下所示:
module A
def show
puts "working"
end
end
include A
class E
end
class D
end
e = E.new
d = D.new
e.show
d.show
o = Object.new
puts o.respond_to?("show")
******************************output****************
working
working
true
我期待输出为undefined method
,但它给了我正确的输出。我还观察到show
中定义的module A
方法正在成为Object
的实例方法。
为什么这些方法成为类Object
的实例方法?
请帮助理解这个概念。
答案 0 :(得分:3)
因此,包含在Object
中的模块可用于Class
个实例的实例(E
和D
类的实例)。
class A
end
module B
def test; :hi end
end
#=> test
include B
#=> Object
A.new.test
#=> :hi
Object.new.test
#=> :hi
将include B
写在顶层意味着include
将B
加入Object
。
include B
最外层的上下文相当于:
class Object
include B
end
唯一一个实例不共享模块B
方法的类是BasicObject
。