Pharo 中的 at ("@") 运算符是什么?
What is the at ("@") operator in Pharo?
我在网上查找了 Pharo 中 @
运算符的含义,但找不到任何内容。
Pharo @
运算符的含义是什么?例如,为什么 25@50
被评估为:"(25@50)"
?
在 Smalltalk 中,@
符号用于创建 class Point
的实例。这种 class 的实例有两个 ivars x
和 y
。您可以使用 x:y:
消息创建一个 Point
,就像这样
Point x: 3 y: 4.
但是,像这样使用消息 @
会更简洁
3 @ 4
创造同样的东西。
请注意,虽然 x:y:
是您发送给 class Point
的消息,但消息 @ 4
发送给整数 3
。也就是说,前者是class消息,后者是实例消息。
请注意,由于许多人写 3@4
而不是 3 @ 4
,这有产生令人惊讶的副作用的风险。事实上
3@-4
应该是(原则上)坐标3
和-4
的Point
。但是,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
我在网上查找了 Pharo 中 @
运算符的含义,但找不到任何内容。
Pharo @
运算符的含义是什么?例如,为什么 25@50
被评估为:"(25@50)"
?
在 Smalltalk 中,@
符号用于创建 class Point
的实例。这种 class 的实例有两个 ivars x
和 y
。您可以使用 x:y:
消息创建一个 Point
,就像这样
Point x: 3 y: 4.
但是,像这样使用消息 @
会更简洁
3 @ 4
创造同样的东西。
请注意,虽然 x:y:
是您发送给 class Point
的消息,但消息 @ 4
发送给整数 3
。也就是说,前者是class消息,后者是实例消息。
请注意,由于许多人写 3@4
而不是 3 @ 4
,这有产生令人惊讶的副作用的风险。事实上
3@-4
应该是(原则上)坐标3
和-4
的Point
。但是,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