2

例如,在Lessphic 教程(第 6 页)中,编写了以下内容:

aShape := ShapedView withShape: (0@0 corner: 100@100).
aShape := (0@0 corner: 100@100) shapedView.

这是什么意思?它是具有 x 和 y 坐标的点吗?这种符号可能起源于形态。但是“@-sign”很难用谷歌搜索。

4

1 回答 1

3

尽管人们可能对使用 , , 等符号感到困惑@+=认为它们是保留的(即编译器知道的),但在 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' readStreamfor ReadStream on: 'hello world''234.5' asNumberforNumber readFromString: '234.5'等,等等。

于 2017-11-01T01:26:29.303 回答