虽然有可用的文档,但我更困惑,而不是开明。让我们考虑一个例子:
我有一个myObject实例,它有myMethod方法,我从大厅调用它:
myObject myMethod
在这个方法的主体中,完成了以下操作:
myObject1 anotherMethod //1
msg := message(anotherMethod)
myObject2 do(msg) //2
myObject3 doMessage(msg) //3
那么,有人能解释一下12和3之间的区别吗
这些案件的实际主叫人是谁?方法的locals对象,方法对象还是myObject?发送方和调用者之间有区别吗(我想在doMessage的情况下有区别,发送方是myMethod的locals对象,但"调用者"是myObject3)
好吧,按顺序:
- 消息
anotherMethod
由名为myObject
的实例接收。这是在调用上下文中完成的(可能是大厅,除非包装在另一个do()
中 do()
引入了一个新的作用域,并且对调用作用域不做任何操作。也就是说,您不能引用do()
内部调用范围中的任何内容,除非它恰好在Protos层次结构中或在do()
中引入。do()
也有一个消息树,所以你所做的是有效地发送message(msg)
,在myObject
的上下文中进行评估,这没有多大意义,因为由于范围不可用,第一次无法找到msg
,即使是,也没有多大的意义。一般来说,如果你发现自己想写myObject do(msg)
,你想做一些类似的事情:msg doInContext(myObject)
- 在功能上等于上面的#1。事实上,如果你要为Io代码编写一个编译器,直到消息,这或多或少就是你从#1的编译步骤中得到的。在这个简短的例子中,它们是等价的