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