2011-08-30 20 views
2
class Person 
    def name 
    puts "Dave" 
    end 
end 

puts Person.object_id 

只有两种方式的访问的方法:类声明是红宝石的洗眼液吗?一切是否都是面向对象的?

1)Someclass.method中的类的方法的情况。 #where Someclass是一个类。

2)和Object.method当被访问的方法是在类中声明的常规方法。 Object是一个类的实例。

它遵循Object.method这个模式,是不是说Person类真的是一个对象?

或object_id是一个类方法吗?后者似乎不太可能,因为类方法不能被继承到实例中。但是当我们这样做时:

a = Person.new 
a.methods.include?("object_id") # this produces true 

a是Person类的一个实例,因此object_id不能是类方法。

+0

在英语中,问号在词后立即出现。 –

回答

4

是,Ruby类是对象:

>> String.is_a? Object 
=> true 
>> String.methods.count 
=> 131 
>> Fixnum.methods.count 
=> 128 
+0

谢谢@mu太短真棒..非常简单的答案。因为这个,我有很多怀疑。 也许你会回答这个问题,请看看http://stackoverflow.com/questions/7249148/what-happens-during-creation-of-an-object-from-a-class-in -红宝石 – pankajdoharey

1

是,在Ruby类是Class类的实例。事实上,你可以创建同一类只是:

Person = Class.new do 
    define_method :name do 
    puts 'Dave' 
    end 
end 

然后,您可以只输入Person.new.name,它会工作完全为你的类。

检查该人员是类别Class的一个实例,就如输入您的repl Person.class一样简单,您将得到Class作为回报。