FreePascal,Delphi模式。经过一些实验,我发现该代码已编译,FPC告诉我类过程必须是“静态的”。但是我的问题是:那为什么运算符Equal
不需要“静态”并且可以正常编译?我也无法理解“类”过程和“类”与“静态”有什么区别(例如,在classmethod
中的Python中,您会获得参数-在staticmethod
中引用该类) -您没有这样的说法。
type TPos = record
FLine: Word;
FPos: Word;
class procedure Init(out a: TPos); static;
class operator Equal(a, b: TPos): Boolean;
end;
PS。我设置“ delphi”标签的原因是:1)它是在delphi模式下编写的; 2)因为我找到了与Delphi相同的文档:关于类和静态关键字。
答案 0 :(得分:6)
与您声明的相反,非静态类方法确实引用了作为参数传递的类。这是一个名为Self
的隐式参数。
对于与类相对的记录上的类方法,由于没有继承,因此此Self
参数没有任何作用,因此永远不会传递。因此,记录上的所有类方法都必须是静态的。
类运算符隐式是静态方法,因此您无需声明。换句话说,operator
意味着static
。