What languages other than Python have an explicit self?
python要求您显式地将
显式的意思是"显式地作为参数传递给每个类函数"?如果是这样,那么Python是我手头上唯一知道的。
大多数OO语言在某种形式上支持
编程语言oberon 2有一个显式命名的但没有显式传递类成员函数的"this"或"self"参数(在oberon术语中称为类型绑定过程)。
下面的示例是类型文本上的insert方法,其中指定标识符"t"以绑定到显式的"this"或"self"引用。
1 2 3 | PROCEDURE (t: Text) Insert (string: ARRAY OF CHAR; pos: LONGINT); BEGIN ... END Insert; |
关于Oberon中对象方向的更多详细信息,请参阅。
根据你的观点,卢亚。引用引用:"call v:name(args)是v.name(v,args)的语法糖,除了v只计算一次。"您还可以使用任一表示法定义方法。所以你可以说Lua有一个可选的明确的自我。
f(可能来自其ocaml传统)需要所有自引用的显式名称;尽管名称是任意标识符,例如。
1 2 3 | override x.BeforeAnalysis() = base.BeforeAnalysis() DoWithLock x.AddReference |
这里我们定义一个重写的成员函数
模块-3。这并不奇怪,因为Python的类机制是在Muldia-3和C++中发现的混合。
任何面向对象的语言在成员函数中都有这个或自我的概念。
Clojure不是OOP语言,但在某些情况下确实使用显式的自参数:尤其是在实现协议时,"self"参数(您可以随意命名)是协议方法的第一个参数。然后将此参数用于多态分派,以确定正确的函数实现,例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | (defprotocol MyProtocol (foo [this that])) (extend-protocol MyProtocol String (foo [this that] (str this" and" that))) (extend-protocol MyProtocol Long (foo [this that] (* this that))) (foo"Cat""Dog") =>"Cat and Dog" (foo 10 20) => 200 |
此外,函数的第一个参数通常被约定用于表示正在被操作的对象,例如,要附加到向量的以下代码:
1 2 | (conj [1 2 3] 4) => [1 2 3 4] |
许多面向对象的语言,如果不是全部的话
例如C++支持"这个"而不是"自我"
但你不必通过,它是被动通过的
希望有帮助;)