我在某人的代码中看到了类似的内容:
class Test01
def initialize
puts "some text"
end
end
x = Test01 #this part confuses me
y = Test02 #I added this to see what will happen
a = x.new #works like expected
p a.class #Test01
p x.class #Class
p y.class #Error: uninitialized constant
答案 0 :(得分:4)
Ruby将所有东西视为对象。这包括类定义以及数字,自定义类等。这种一致性有助于更快地了解Ruby。但是,它确实使一些事情成为可能,而这在其他语言中是不可能的。
当你看到
x = Test01
你基本上让x
保持Test01
的常数值。您可以将其传递给方法,进行反射,甚至可以像x
一样向Test01
添加新方法。这就是为什么
a = x.new
b = Test01.new
本质上是相同的命令。在这两种情况下,您都会获得Test01
类的实例作为新对象。 x
类仍然分配给Test01
类。 a
是Test01
的实例,x
是 Test01
。
Test01.class # returns 'Class'
x.class # returns 'Class'
a.class # returns 'Test01' because it is an instance of 'Test01'
答案 1 :(得分:2)
您将Test01
常量分配给x
,Test01
常量值为class,因此x
包含Test01
类。