在the source中,我看到class Trace < self
(第323行)
在内部类中,这些类被称为self ^ Trace.new(*args)
(第304行)。
请解释这些机制及其用例。哪里可以在他们的代码中使用这样的结构,以及为什么?
答案 0 :(得分:1)
这里发生了两件不同的事情。
class Trace < self
构建一个新的Trace
类,该类继承自Promise
,此时为self
。在另一个文件中,您会将其视为class Promise::Trace < Promise
,但由于Trace
在同一文件中定义,因此他们使用此简写。
self ^ Trace.new(*args)
正在调用^
上的self
方法,并将新的Trace
作为参数,就像您要为{XOR}调用2 ^ 3
一样。 ^
在第160行定义。
答案 1 :(得分:0)
class Trace < self
定义了一个类Trace
,它是self
的子类。在您的特定上下文中,由于此定义位于Promise
类中,self
引用Promise
,因此Trace
被定义为Promise
的子类。
304行不涉及任何魔法,^
被定义为第160行的方法。