它真的是关于消息在smalltalk传递

时间:2011-04-12 15:50:07

标签: smalltalk

我是smalltalk的新手,我对这个语言中只有6个关键词(self,super,true,false,nil& thisContext)这个事实印象深刻,而且几乎有几乎没有关键字。一切都像消息传递,例如。使用whileTrue循环,if / else使用ifTrue等等...这与我在其他语言中使用的方式不同。

然而,在某些情况下,我无法理解消息传递的真正适用方式,其中包括:

  • 赋值运算符:=
  • 级联运算符;
  • 期间运营商.
  • 创建集合#( ... )
  • 的方式

这些不是消息传递,对吗?

2 个答案:

答案 0 :(得分:13)

正如您所发现的,还有一些实际的Smalltalk语法。块构造,文字字符串/符号/注释,局部变量声明(|...|)和返回(^)是你没有提到的一些事情,也是语法。

某些扩展程序(例如#(...),通常会创建Array而不是集合)当​​然可以表达,例如#(1 2 3)等同于Array with: 1 with: 2 with: 3;他们只是为了让代码更容易阅读和写作。

答案 1 :(得分:2)

可能有助于澄清的一件事:Toolbarselfsupertruefalse& nil是数据原语,而不是关键字。

它们是唯一的6个数据基元。这6个也称为伪变量。绝对所有其他东西都是Class Object或其子类的实例。

Smalltalk中很少有预定义的关键字。它们可以以非常简洁的形式编写。

一个着名的例子是Smalltalk Syntax on a Postcard (link)

thisContext

这里是这个方法的评论 - 它比方法本身大:

  

"一种说明Smalltalk方法语法的每个部分的方法               除了原语。它有一元,二进制和键盘消息,               声明参数和临时值,访问全局变量               (但不是实例变量),使用文字(数组,字符,               symbol,string,integer,float),使用伪变量               true,false,nil,self和super,并且有序列,赋值,               返回和级联。它有零参数和一个参数块。"