2011-08-30 76 views
3

什么是在下面的代码从对象创建对象?还是我迷惑

A = Class.new 

class << A 
    def speak 
    puts "Dave" 
    end 
end 

A.speak 
B = A.new 

发生的这怎么可能什么是真正发生的事情。什么是'班'班。当你正在定义一个空类,并给它取名为A

class A 
end 

回答

4
A = Class.new 

这是类似的。 (注:在Ruby中的约定是,开始以大写字母标识符是常数。)

class << A 
    def speak 
    puts "Dave" 
    end 
end 

是类似于:

class A 
    def A.speak 
    puts "Dave" 
    end 
end 

在这里,你是在A定义一个类的方法(而不是一个实例方法)。

线:

A.speak 

被简单地调用类方法。

最后:

B = A.new 

创造A类的实例,并将其分配给恒B


要回答你的其他问题。 Class是... Class!你可以在irb中看到:

irb(main):022:0> Class.class 
=> Class 
+0

那么什么是A?一个对象还是一个类? – pankajdoharey

+0

在Ruby类中也是对象。所以它都是。 – jergason

+0

Jergason是正确的。 'A'是一个类,你也可以说它是一个对象,它的类是'Class',或者它是'Class'类的一个实例。它不是类“A”的一个实例,但是“B”是类“A”的一个实例。此外,'B'本身不是一个阶级,而是一个对象。 –