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



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

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

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

Point x: 3 y: 4.

但是,像这样使用消息@不太冗长

3 @ 4

创造同样的东西。

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

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

3@-4

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

在 Pharo 中,它是在 Number 类中定义的方法

@ 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

最新更新