3
OperatorTable addAssignOperator(":", "myAssignMethod")
"foo" : "bar"

这给出了一个错误,即序列不响应“:”(“:”仍被视为消息,而不是运算符)。

我认为它应该被评估为myAssignMethod("foo", "bar")(因为"foo" = "bar"成为updateSlot("foo", "bar")),但事实并非如此。然而:

OperatorTable addAssignOperator(":", "myAssignMethod")
doString("\"foo\" : \"bar\"")

确实可以正常工作,myAssignMethod并被调用。doString()那么,在文件的主代码中工作期间,我如何获得代码上发生的任何处理?

4

2 回答 2

7

:是一个有效的标识符,并且具有特殊的含义。它用于指示objective-c 绑定中的参数数量。强烈建议您选择其他运营商。

另请注意,所有运算符表修改必须在您使用它们加载和解析的文件之前完成,因为运算符改组发生在编译时(加载文件时)而不是评估时。REPL 隐藏了这个问题,因为每次你按回车时它都有一个新的编译。

此外,如果您想查看某些内容将被编译成什么(对操作员有用),请将其包装在message()调用中。即,message(1 + 2)1 +(2)在 REPL 中产生。

于 2012-04-14T04:11:01.843 回答
0

原来这似乎是最近修复的 Mac 环境中的一个错误;我正在使用 Io 的 MacPorts 构建,环境的“20090105”版本有这个错误。在 Windows/Linux 二进制文件上运行相同的代码会产生预期的行为。

于 2012-04-16T18:33:42.020 回答