fai*_*cpt 4 programming-languages smalltalk squeak seaside
我试图通过Dolphin Smalltalk X6附带的教程学习Smalltalk.
我的问题涉及对具有多个消息的表达式的评估.
我的理解是首先评估简单消息,然后评估二进制消息,最后评估关键字消息(括号中的代码除外).但是,我无法将这种理解应用到以下示例中的第二行(在Dolphin Smalltalk教程中找到).
playground := Playground new.
teresa := playground add: Triangle new. "Misunderstood code"
teresa class. "Evaluates to 'Triangle'"
Run Code Online (Sandbox Code Playgroud)
如果我的理解是正确的,那么第二行将被评估:
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'".
Run Code Online (Sandbox Code Playgroud)
我的误解是'teresa'如何引用匿名Triangle对象而不是'playground'引用的Playground对象.
我已经查阅了Smalltalk评估的第二个解释,提到:=或添加:是特殊情况没有成功,我能想到的唯一其他解释是一个根本的误解.
任何帮助拉直我的帮助?
赋值运算符(:=)不是消息.(它不会发送到对象,而是表示应将变量设置为值).它的优先级总体上是最后的.
那么会发生什么:
虽然:=看起来像二进制消息,因为它使用中缀字符......但事实并非如此.它是语言语法的一部分,与parens和句点相同(例如).
想一想:=作为赋值运算符(有时称为"获取").它不是任何优先级的消息.它会在任何消息发送后进行评估.它的左值必须是直接变量引用(不是消息发送的结果).