因为我们知道类也是类Class的对象。我在这里有疑问。 我有一个在这里定义的类Foo和一个打印对象的方法。
class Foo
def bar
puts self
end
puts self
end
当我做Foo.new.bar o / p将是# <Foo:0x935c740>
它代表了Foo类的一个对象。
为什么方法之外的self不打印#<Class: 0x..>
作为类Class的对象?
对不起,如果我的问题有误,请澄清。
答案 0 :(得分:3)
类和模块的名称在ruby中是不变的。因此,在定义类时,您正在创建类Class的对象并为其提供常量名称,因此当您在类上下文中执行puts self
时,它会提供类名而不是{{1 }}
答案 1 :(得分:3)
这是定义类/对象的一种不同方式:
klass = Class.new {
puts self
def bar
puts self
end
}
# #<Class:0x3fbdbb8>
如您所见,它输出#<Class:0x3fbdbb8>
。所以它的类是Class
。您可以通过class
方法检查:
klass.class
# => Class
当您第一次使用大写字母(例如Example
)命名您的类时,它将其用作输出而不是隐藏名称,如:#<Class:0x3fbdbb8>
。
Foo = Class.new {
puts self
def bar
puts self
end
}
仍然输出含义模糊名称,因为Foo =
的部分尚未评估尚未。
puts Foo
输出正确的名称 - Foo
Qux = Foo
# => Foo
无。 Foo
永远是Foo
。