这句话"a class is an object even if not instantiated"是什么意思?

What does the statement "a class is an object even if not instantiated" mean?

本文关键字:instantiated not 是什么 意思 if object class is an 这句话 even      更新时间:2023-10-16

我是一名学习Ruby的C++程序员。在我读过的一本初学者书中:

"类本身就是一个对象,即使你没有直接实例化它。">

我不知道该怎么解释。

在C++中,除了typeid等人之外,没有任何语言可见的类的运行时表示。你可以说class Foo {};,但不能说&Foo。(您可以获得typeinfo对象的typeid/地址,它是类对象的一个非标准化版本(。

在Ruby中,类是对象。你能对一个对象做的任何事情,都可以对一个类做,因为它是一个对象。例如,在Ruby中,可以将foo.send(...)转换为任何对象foo。由于类是一个对象,所以您可以像Foo.send(...)一样。

关于"你没有安装它"的部分指的是这样一个事实,即通常你在Ruby中说foo = Foo.new,但在类中不需要这么说。类对象由运行时创建。(事实上,Ruby中的class Foo; endFoo = Class.new非常相似。(

在Ruby中,一切都是一个对象。这包括课程。所以当你申报时

class Thing
end

您已经创建了一个名为ThingClass类的实例。它与相同

Thing = Class.new

这将"直接实例化"CCD_ 14的实例。

Ruby中的所有东西都是一个对象,甚至是类本身。
class Test
  def self.foo
    "bar"
  end
  def yin
    "yang"
  end
end
# This creates a new instance and calls #yin
Test.new.yin # => "yang"
# This calls the #foo method on the Test class object.
Test.foo     # => "bar"

在其他一些语言中,有一种叫做"抽象类"的东西。这些东西本身不是物体,不能真正做任何事情。它们实际上更像是一个创建实际对象的模板。一个实际的对象可以做一些事情,比如运行方法、接受参数等。一个抽象类不能做任何事情,它的存在主要是为了创建一个真实的对象。从它们创建对象时,称为"实例化"对象。

现在在ruby中,您没有抽象类。用于从中派生对象(实例化(的类在某些方面有点像抽象类。但与抽象类不同,ruby中的这个类已经可以自己做事情了。

这就是你引用的语句"类本身就是一个对象,即使你没有直接实例化它"试图表明的。它不是抽象类意义上的虚拟。相反,它已经是一个成熟的物体了。

所有这一切真正意味着你可以像对待这些类的实例一样对待这些类。

class Animal; end
bird = Animal.new

现在,您可以像使用bird一样使用Animal

例如

Animal.methods => 'list of methods'
bird.methods => 'list of methods'

这就是它真正的全部。