例如,在Lessphic 教程(第 6 页)中,编写了以下内容:
aShape := ShapedView withShape: (0@0 corner: 100@100).
aShape := (0@0 corner: 100@100) shapedView.
这是什么意思?它是具有 x 和 y 坐标的点吗?这种符号可能起源于形态。但是“@-sign”很难用谷歌搜索。
例如,在Lessphic 教程(第 6 页)中,编写了以下内容:
aShape := ShapedView withShape: (0@0 corner: 100@100).
aShape := (0@0 corner: 100@100) shapedView.
这是什么意思?它是具有 x 和 y 坐标的点吗?这种符号可能起源于形态。但是“@-sign”很难用谷歌搜索。
尽管人们可能对使用 , , 等符号感到困惑@
,+
并=
认为它们是保留的(即编译器知道的),但在 Smalltalk 中它们都是常规方法的选择器。换句话说,它们不是保留标记,而是(在大多数情况下)实现预期行为的消息的有效选择器。
在特定情况下@
,如果我们搜索实现者,我们会在 中找到一个Number
,通常实现为
@ aNumber
^Point x: self y: aNumber
(然而,在 Pharo 中,有一个用于加速的原语,否则不需要)
此消息的原因是提供一种不太冗长的Point
创建方法,以便客户端只需编写,比如说200 @ 300
,而不是Point x: 200 y: 300
.
请注意,这种模式在 Smalltalk 中很常见。几个问题之前,在这个 [smalltalk] 标签中,我们讨论了消息/
,它是同类的快捷方式:2 / 3
相当于(Fraction numerator: 2 denominator: 3) reduced
. 其他示例包括'hello world' readStream
for ReadStream on: 'hello world'
、'234.5' asNumber
forNumber readFromString: '234.5'
等,等等。