IO语言:消息发送、do和doMessage有什么区别

IO language: what is the difference between a message send, do and doMessage

虽然有可用的文档,但我更困惑,而不是开悟。让我们考虑一个例子:
我有一个 myObject 实例,它有 myMethod 方法,我从大厅调用它:

myObject myMethod

在此方法的主体中完成以下操作:

myObject1 anotherMethod //1
msg := message(anotherMethod)
myObject2 do(msg) //2
myObject3 doMessage(msg) //3

所以,谁能解释一下 1 2 和 3 之间的区别?
谁是这些案件的真正来电者?方法的局部对象,方法对象还是myObject?发件人和来电者之间是否有区别(我想在 doMessage 的情况下有一个区别,其中发件人是 myMethod 的本地对象,但 "caller" 是 myObject3)

好的,所以顺序是:

  1. 消息 anotherMethod 被名为 myObject 的实例接收。这是在调用上下文中完成的(可能是大厅,除非包裹在另一个 do()
  2. do() 引入了一个新的作用域,并且对调用作用域没有任何作用。也就是说,您不能在 do() 内引用调用范围内的任何内容,除非它恰好在 Protos 层次结构中或在 do() 内引入。 do() 也有一个消息树,所以你正在做的是有效地发送 message(msg) 以在 myObject 的上下文中进行评估,这没有多大意义,因为 msg 首先由于范围不可用而无法找到,即使是,也没有多大意义。通常,如果您发现自己想要写成 myObject do(msg).
  3. ,您想要做的事情类似于:msg doInContext(myObject)
  4. 在功能上等同于上面的#1。事实上,如果您要为 Io 代码编写一个编译器直至消息,这或多或少就是您从 #1 的编译步骤中得到的结果。在这个简短的示例中,它们是等效的。