除了Python以外,哪些语言有明确的自我?

What languages other than Python have an explicit self?

python要求您显式地将self作为所有类函数的第一个参数传递,这似乎有点奇怪。还有其他语言需要类似的东西吗?


显式的意思是"显式地作为参数传递给每个类函数"?如果是这样,那么Python是我手头上唯一知道的。

大多数OO语言在某种形式上支持thisself,但大多数OO语言允许您定义类函数,而不总是将self定义为第一个参数。


编程语言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

这里我们定义一个重写的成员函数BeforeAnalysis,它调用另一个成员函数AddReference。这里的标识符x是任意的,但在声明和对"this"/"self"实例成员的任何引用中都是必需的。


模块-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++支持"这个"而不是"自我"

但你不必通过,它是被动通过的

希望有帮助;)