我正在尝试通过Dolphin Smalltalk X6附带的教程学习Smalltalk。“:=”和Smalltalk中的二进制消息优先级
我的问题涉及评估带有多条消息的表达式。
我的理解是,首先评估简单的消息,然后评估二进制消息,最后评估关键字消息(除了括号中的代码)。但是,在下面的示例中(第Dolphin Smalltalk tutorial中发现),我无法将此理解应用于第二行。
playground := Playground new.
teresa := playground add: Triangle new. "Misunderstood code"
teresa class. "Evaluates to 'Triangle'"
如果我的理解是正确的,2号线将正是如此评价:
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'".
我的误解是如何“邓丽君”来指代匿名三角对象,而不是游乐场对象简称到'游乐场'。
我已经查阅了关于Smalltalk评估的第二个解释,提及:=或添加:是没有成功的特殊情况,我能想到的唯一的其他解释是一个根本性的误解。
任何帮助矫直我?
让人想知道为什么:=不是Smalltalk中的消息。为什么不让变量接收:=? – Hendekagon 2013-03-11 05:50:11
因为变量实际上是指向对象的指针,所以它不是对象本身。消息发送给变量指向的对象,而:=运算符则更改变量指向的对象。 – 2013-03-12 22:55:02
hmm对象指针不是对象,所以它们不能接收:=(或pointTo:anObject或→) – Hendekagon 2013-04-18 00:20:37