将类名分配给变量

时间:2015-02-27 12:21:05

标签: ruby

我在某人的代码中看到了类似的内容:

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
  • 什么是x?有一次它是班级,其他时间是常数
  • 这是不好的做法吗?如果是,做什么是正确的方法?

2 个答案:

答案 0 :(得分:4)

Ruby将所有东西视为对象。这包括类定义以及数字,自定义类等。这种一致性有助于更快地了解Ruby。但是,它确实使一些事情成为可能,而这在其他语言中是不可能的。

当你看到

x = Test01

你基本上让x保持Test01的常数值。您可以将其传递给方法,进行反射,甚至可以像x一样向Test01添加新方法。这就是为什么

a = x.new
b = Test01.new

本质上是相同的命令。在这两种情况下,您都会获得Test01类的实例作为新对象。 x类仍然分配给Test01类。 aTest01实例x Test01

Test01.class # returns 'Class'
x.class      # returns 'Class'
a.class      # returns 'Test01' because it is an instance of 'Test01'

答案 1 :(得分:2)

您将Test01常量分配给xTest01常量值为class,因此x包含Test01类。