【发布时间】:2014-05-18 15:49:34
【问题描述】:
我正在读一本关于 Smalltalk (Charmond Liu's Smalltalk, Objects and Design) 的书。他以HomeBudget 对象为例,讲述了消息在 Smalltalk 中是如何工作的,以说明如何发送具有多个参数的单个消息:
HomeBudget spend: 229 on: 'VCR'
Objective-C 使用了 Smalltalk 的许多想法,例如消息传递对象和参数的冒号,但始终将消息发送括在方括号中。同样的调用是:
[homeBudget spend:229 on:@"VCR"];
为什么 Objective-C 使用方括号(而不是像 Smalltalk 那样让消息裸露)?因为它是基于 C 的,所以它是必需的语法吗?这是一个风格的选择吗?它是否为您可以表达的内容提供了更多选择?还有其他原因吗?
【问题讨论】:
-
从解析的角度来看,我怀疑这与在 C 语法中玩友好有关。
-
@mah 事实上,Objective-C 最初是作为自定义 C 预处理器 + 运行时。预处理器直接喷出 C 代码,这些代码在方法调用站点和类中调用到运行时,基本上是美化的 C 结构(实际上仍然如此)。
-
bbum 怎么说。当您进行嵌套调用时,Smalltalk 语法有点模棱两可也有帮助,因此您通常不得不将方法调用括在括号中,例如((Class foo: 15) bar: 7) 所以出于实际目的,实际上 Smalltalk 也需要括号。
-
大部分情况下,我怀疑它使构建 Objective-C 预处理器变得容易得多。必须对较少的 C 语法进行解析和仔细分析才能识别“消息”并将其替换为等效的 C 代码。如果没有括号,预处理器会在标签定义方面产生一些歧义。
标签: objective-c syntax smalltalk