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

What is the at ("@") operator in Pharo?

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

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

在 Smalltalk 中,@ 符号用于创建 class Point 的实例。这种 class 的实例有两个 ivars xy。您可以使用 x:y: 消息创建一个 Point,就像这样

  Point x: 3 y: 4.

但是,像这样使用消息 @ 会更简洁

  3 @ 4

创造同样的东西。

请注意,虽然 x:y: 是您发送给 class Point 的消息,但消息 @ 4 发送给整数 3。也就是说,前者是class消息,后者是实例消息。

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

  3@-4

应该是(原则上)坐标3-4Point。但是,Smalltalk 语法不同,会将其解析为带有选择器 @- 和参数 4 的消息发送给接收者 3。这就是为什么有些方言会出现异常,以便将消息解释为 3 @ -4,这可以通过在 Number 中实现方法 @- 或通过调整解析器来实现。

在 Pharo 中,它是在 Number class

中定义的方法
@ y 
"Primitive. Answer a Point whose x value is the receiver and whose y 
value is the argument. Optional. No Lookup. See Object documentation 
whatIsAPrimitive."

<primitive: 18>
^Point x: self y: y