class ClassName<在课堂上自我,自我^ Classname.new

时间:2015-06-21 17:03:36

标签: ruby

the source中,我看到class Trace < self(第323行) 在内部类中,这些类被称为self ^ Trace.new(*args)(第304行)。

请解释这些机制及其用例。哪里可以在他们的代码中使用这样的结构,以及为什么?

2 个答案:

答案 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行的方法。