这句话"a class is an object even if not instantiated"是什么意思?
What does the statement "a class is an object even if not instantiated" mean?
我是一名学习Ruby的C++程序员。在我读过的一本初学者书中:
"类本身就是一个对象,即使你没有直接实例化它。">
我不知道该怎么解释。
在C++中,除了typeid
等人之外,没有任何语言可见的类的运行时表示。你可以说class Foo {};
,但不能说&Foo
。(您可以获得typeinfo
对象的typeid
/地址,它是类对象的一个非标准化版本(。
在Ruby中,类是对象。你能对一个对象做的任何事情,都可以对一个类做,因为它是一个对象。例如,在Ruby中,可以将foo.send(...)
转换为任何对象foo
。由于类是一个对象,所以您可以像Foo.send(...)
一样。
关于"你没有安装它"的部分指的是这样一个事实,即通常你在Ruby中说foo = Foo.new
,但在类中不需要这么说。类对象由运行时创建。(事实上,Ruby中的class Foo; end
与Foo = Class.new
非常相似。(
在Ruby中,一切都是一个对象。这包括课程。所以当你申报时
class Thing
end
您已经创建了一个名为Thing
的Class
类的实例。它与相同
Thing = Class.new
这将"直接实例化"CCD_ 14的实例。
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'
这就是它真正的全部。
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- OpenCV Android C++ imwrite not found
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 使用单词"not"作为C ++类的名称会导致VS2019错误
- 错误"Could not find Boost"(缺少:上下文标头)
- 如何修复"error: ‘_1’ was not declared in this scope"?
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- Is !NaN not a NaN?
- 为什么我会" void value not ignored as it ought to be"?
- 解决"ld: library not found for -ltensorflow_framework.2.3.0"
- 加载与引用 .NET DLL 位于同一文件夹中的引用的 .NET DLL 时"Not found"异常
- Directx 11 - CompileFromFile() is not compiling
- 方法错误"not all control paths return a value"和方法不返回值
- Centos7 g++ "to_string is not in a member of std"
- 将系数存储在头文件的数组中("does not name a type"错误)
- QGraphicsItems not showing up QGraphicsScene
- 在调试模式下引发C++ "deque iterator not dereferencable"异常
- InitializeCriticalSectionEx Not Located In KERNEL32.Dll
- 这句话"a class is an object even if not instantiated"是什么意思?