Pharo 中的 at ("@") 运算符是什么?

asy*_*Fan 4 pharo

我在网上寻找@Pharo 中运算符的含义,但找不到任何内容。

Pharo@运算符的含义是什么?例如,为什么25@50被评估为:"(25@50)"

Lea*_*lia 5

在 Smalltalk 中,@符号用于创建类的实例Point。这样一个类的实例有两个 ivarsxy。您可以Point使用该x:y:消息创建一个,如下所示

  Point x: 3 y: 4.
Run Code Online (Sandbox Code Playgroud)

但是,它更简洁使用信息@像这样

  3 @ 4
Run Code Online (Sandbox Code Playgroud)

创造同样的东西。

请注意,虽然x:y:是您发送给类Point的消息,但该消息@ 4是发送给整数的3。换句话说,前者是类消息,后者是实例消息。

请注意,由于许多人写3@4而不是3 @ 4,这有产生令人惊讶的副作用的风险。实际上

  3@-4
Run Code Online (Sandbox Code Playgroud)

应该(原则上)Point与坐标3-4。然而,Smalltalk 语法是不同的,它将把它解析为带有选择器@-和参数的消息4发送给接收者3。这就是为什么有些方言破例使得消息被解释为3 @ -4,这可以通过实现该方法来实现@-Number或通过调整解析器。