在下面的代码中,我不明白为什么类会返回它们的名字。
module Show
def show_string
p "hi"
end
end
class Foo
@x=12
include Show
end
# => Foo
class Test
include Show
end
# => Test
要查看原因,我插入了object_id
。它现在显示对象id。
class Foo
@x=12
(include Show).object_id
end
# => 10681980
class Too
@x=12
(include Show).object_id.inspect
end
# => "10648020"
我没有在Foo.new
和Too.new
上创建任何对象。是否在类定义中创建了这样的对象?
答案 0 :(得分:2)
定义模块/类时,返回值是正文中的最后一个表达式:
module A; :foo end
# => :foo
当正文为空时,它会返回nil
。
module A; end
# => nil
现在,请注意include
的返回值是包含的模块。您可以在main
环境中看到这一点:
p (include A)
# => Object
因此,当您在include A
的模块正文中执行B
时,返回值应该是最后一个表达式include A
的值,即B
。
module B
include A
end
# => B
您尚未创建Foo
或Too
的任何实例。您看到的对象ID是类Foo
和Too
的对象ID。
答案 1 :(得分:1)
在您的第一个代码示例中,类未返回其名称。他们正在返回这些类本身,其中irb呈现为类名。
对于第二个代码块,#include的返回值是执行包含的类。您在第二个代码块中看到的对象ID是Foo和Too的对象ID。这会回答你的问题吗?