Ruby对象模型澄清

nik*_*ik7 1 ruby metaprogramming

在Ruby中,我可以写,

Dog = Class.new
Run Code Online (Sandbox Code Playgroud)

所以在这里,DogObject一个实例Class.

另外,我可以写

fido = Dog.new
Run Code Online (Sandbox Code Playgroud)

这只有在Doga时才有可能Class.

这是Dog一个Class还是一个Object

Ser*_*sev 5

红宝石中的所有东西都是Object(块除外).而Dog这里也是Class.

Dog = Class.new
fido = Dog.new
Run Code Online (Sandbox Code Playgroud)

所以答案是:两者兼而有之.

  • @nik:狗是哺乳动物.Fido是一只狗.所以,它既是犬科动物,也是哺乳动物.不同层次的层次结构. (3认同)

Aru*_*hit 5

询问对象本身,知道它们属于哪里,如下所示:

Dog = Class.new
fido = Dog.new
Dog.instance_of? Class #=> true
fido.instance_of? Class #=> false
fido.instance_of? Dog #=> true
Dog.superclass #=> Object
Dog.is_a? Object #=> true
Dog.is_a? Class #=> true
Run Code Online (Sandbox Code Playgroud)

要详细了解,请参阅 Object model Documentation