2011-10-03 92 views
6

这是如何工作的?当运行以下内容时,会打印两次"hi from class"。红宝石内部发生了什么事情,使其表现如此?我不是其实做一个实例方法类class Class - instance与类方法

class Class 
    def foo 
    puts "hi from class" 
    end 
end 

Class.foo 
x = Class.new 
x.foo 

回答

9

我不知道你是否已经意识到这一点,但是当你做class Class ... end,你不创建一个新的类名为Class,你”重新开放现有班级Class

由于Class是所有类都是实例的类,这意味着Class是它自己的一个实例。正因为如此,你可以直接在Class上调用任何实例方法Class,就像你在任何其他类上的方式一样。

+0

那么当(在'class Class'体内)发生了什么''def self.foo; “来自**自己的**”**;结束;'...现在语句'Class.foo'打印'hi从自己'? – slindsey3000

+0

@ slindsey3000:如果你在'Class'中定义了一个实例方法和一个类方法,那么'Class.foo'将调用类方法,'AnyOtherClass.foo'将调用实例方法。所以在你的例子中,'Class.foo'将会打印'hi from ** self **',例如'String.foo'将会打印'hi from class'。 – sepp2k