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

4

2 回答 2

4

是的,Ruby 类是对象:

>> String.is_a? Object
=> true
>> String.methods.count
=> 131
>> Fixnum.methods.count
=> 128
于 2011-08-30T22:40:27.553 回答
1

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

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

然后,您只需键入Person.new.name,它就会像您的课程一样工作。

检查 Person 是否是类的实例Class就像输入你的 repl 一样简单Person.class,你会得到Class回报。

于 2011-08-30T23:16:07.510 回答