我在网上查找了Pharo中@
运算符的含义,但找不到任何东西。
法罗@
运算符的含义是什么?例如,为什么25@50
被评估为:"(25@50)"
?
在 Smalltalk 中,@
符号用于创建类Point
的实例。此类的实例有两个 ivarsx
和y
。您可以使用x:y:
消息创建Point
,如下所示
Point x: 3 y: 4.
但是,像这样使用消息@
不太冗长
3 @ 4
创造同样的东西。
请注意,虽然x:y:
是发送到类Point
的消息,但消息@ 4
发送到整数3
。换句话说,前者是类消息,后者是实例消息。
请注意,由于许多人写3@4
而不是3 @ 4
,这有可能产生令人惊讶的副作用。事实上
3@-4
应该是(原则上)坐标为3
和-4
的Point
。但是,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