我是smalltalk的新手,我对这个语言中只有6个关键词(self,super,true,false,nil& thisContext)这个事实印象深刻,而且几乎有几乎没有关键字。一切都像消息传递,例如。使用whileTrue循环,if / else使用ifTrue等等...这与我在其他语言中使用的方式不同。
然而,在某些情况下,我无法理解消息传递的真正适用方式,其中包括:
:=
;
.
#( ... )
这些不是消息传递,对吗?
答案 0 :(得分:13)
正如您所发现的,还有一些实际的Smalltalk语法。块构造,文字字符串/符号/注释,局部变量声明(|...|
)和返回(^
)是你没有提到的一些事情,也是语法。
某些扩展程序(例如#(...)
,通常会创建Array
而不是集合)当然可以表达,例如#(1 2 3)
等同于Array with: 1 with: 2 with: 3
;他们只是为了让代码更容易阅读和写作。
答案 1 :(得分:2)
可能有助于澄清的一件事:Toolbar
,self
,super
,true
,false
& nil
是数据原语,而不是关键字。
它们是唯一的6个数据基元。这6个也称为伪变量。绝对所有其他东西都是Class Object或其子类的实例。
Smalltalk中很少有预定义的关键字。它们可以以非常简洁的形式编写。
一个着名的例子是Smalltalk Syntax on a Postcard (link)
thisContext
这里是这个方法的评论 - 它比方法本身大:
"一种说明Smalltalk方法语法的每个部分的方法 除了原语。它有一元,二进制和键盘消息, 声明参数和临时值,访问全局变量 (但不是实例变量),使用文字(数组,字符, symbol,string,integer,float),使用伪变量 true,false,nil,self和super,并且有序列,赋值, 返回和级联。它有零参数和一个参数块。"