1

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

myObject myMethod

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

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

那么,谁能解释一下 1 2 和 3 之间的区别?
谁是这些案件的真正来电者?方法的locals对象,方法对象还是myObject?发送者和调用者之间是否有区别(我想在 doMessage 的情况下有区别,其中发送者是 myMethod 的本地对象,但“调用者”是 myObject3)

4

1 回答 1

2

好吧,按顺序:

  1. 该消息anotherMethod由名为 的实例接收myObject。这是在调用上下文中完成的(可能是大厅,除非包裹在另一个do()
  2. do()引入了一个新的作用域,并且对调用作用域不做任何事情。也就是说,你不能在 a 内引用调用范围内的任何东西,do()除非它恰好在 Protos 层次结构中或在do(). do()还需要一个消息树,因此您正在做的是有效地发送message(msg)以在其上下文中进行评估,myObject因为msg由于范围不可用而无法找到 first off,即使它是,没有多大意义。一般来说,你想做这样的事情:msg doInContext(myObject)如果你发现自己想写myObject do(msg).
  3. 在功能上等于上面的#1。事实上,如果你要为 Io 代码编写一个编译器到消息,这或多或少是你从 #1 的编译步骤中得到的。在这个简短的示例中,它们是等价的。
于 2017-12-31T19:06:27.163 回答