Programming languages &引用;:=&引用;Smalltalk中的二进制消息优先级

Programming languages &引用;:=&引用;Smalltalk中的二进制消息优先级,programming-languages,smalltalk,squeak,seaside,Programming Languages,Smalltalk,Squeak,Seaside,我试图通过Dolphin Smalltalk X6附带的教程学习Smalltalk 我的问题涉及对包含多条消息的表达式的求值 我的理解是,首先计算简单消息,然后是二进制消息,最后是关键字消息(括号中的代码除外)。但是,我很难将这种理解应用到下面示例中的第二行(在中找到) 如果我的理解是正确的,那么第二行将被评估为: 1. Simple message 'new' sent to Triangle, triangle object as response 2. Binary mes

我试图通过Dolphin Smalltalk X6附带的教程学习Smalltalk

我的问题涉及对包含多条消息的表达式的求值

我的理解是,首先计算简单消息,然后是二进制消息,最后是关键字消息(括号中的代码除外)。但是,我很难将这种理解应用到下面示例中的第二行(在中找到)

如果我的理解是正确的,那么第二行将被评估为:

    1. Simple message 'new' sent to Triangle, triangle object as response
    2. Binary message ':=' with parameter 'playground' sent to 'teresa'.
    3. Keyword message 'add:' with parameter 'triangle object' sent to 'teresa'.
    4. teresa class. "evaluates to 'Playground'".
我的误解是“teresa”指的是匿名的三角形对象,而不是“Played”指的操场对象

我查阅了Smalltalk评估的第二个解释,其中提到:=或添加:作为特例,没有成功,我能想到的唯一其他解释是一个根本性的误解

有什么可以帮我澄清的吗?

赋值运算符(:=)不是消息。(它不发送到对象,而是指示应将变量设置为值)。它的优先级是最后一个

因此发生的情况是:

  • 简单消息“新建”发送到三角形,三角形对象作为响应
  • 关键字messageadd:发送到游乐场,并且有一个约定add:消息回答添加的对象,这一个似乎遵循,所以新创建的三角形被返回
  • 变量teresa设置为新三角形
  • 特蕾莎班。“计算为三角形”

  • While:=看起来像一个二进制消息,因为它使用中缀字符。。。事实并非如此。它是语言语法的一部分,就像paren和句点一样(例如)


    将:=看作赋值运算符(有时称为“get”)。这不是一条具有任何优先权的信息。它在任何消息发送后进行评估。它的左值必须是一个直接变量引用(而不是消息发送的结果)。

    让人纳闷为什么:=不是Smalltalk中的消息。为什么不让变量接收:=?因为变量实际上是指向对象的指针,而不是对象本身。消息被发送到变量指向的对象,而:=运算符更改变量指向的对象。hmm对象指针不是对象,因此它们无法接收:=(或指向:anObject,或→)@Hendekagon动态语言在很大程度上继承了Smalltalk的传统,实际上正是如此。Self(有时被称为Smalltalk之子)Python允许一个人调整赋值操作的方式。其他人可能也一样。我曾经为VisualWorks设计了一个具体化插槽的原型,其中包括添加了一个钩子,用于任意调整变量插槽的set/access。
        1. Simple message 'new' sent to Triangle, triangle object as response
        2. Binary message ':=' with parameter 'playground' sent to 'teresa'.
        3. Keyword message 'add:' with parameter 'triangle object' sent to 'teresa'.
        4. teresa class. "evaluates to 'Playground'".