Class声明是红宝石的洗眼液吗?一切都是面向对象的?

时间:2011-08-30 22:25:02

标签: ruby class-method

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不能是类方法。

2 个答案:

答案 0 :(得分:4)

是的,Ruby类是对象:

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

答案 1 :(得分:1)

是的,Ruby中的类是类Class的实例。实际上,您可以使用以下命令创建相同的类:

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

然后,您只需输入Person.new.name,它就会像您的班级一样工作。

检查Person是一个类Class的实例就像在您的repl Person.class中输入一样简单,然后得到Class作为回报。