io Assignment Operator没有评估?

时间:2012-04-13 16:39:56

标签: iolanguage

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

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

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

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

运行正常,myAssignMethod被调用。那么如何在doString()期间获取代码中的任何处理以在文件的主代码中工作?

2 个答案:

答案 0 :(得分:7)

:是有效的标识符,具有特殊含义。它用于指示objective-c绑定中的参数数量。强烈建议您选择其他操作员。

另请注意,所有操作员表修改必须在您正在加载和解析它们的文件之前完成,因为操作符重排是在编译时(加载文件时)而不是在评估时发生的。 REPL隐藏了这个问题,因为每次你按Enter键都有一个新的编译。

此外,如果您想查看将要编译的内容(对运算符有用),请将其包含在message()调用中。即,message(1 + 2)将在REPL中产生1 +(2)

答案 1 :(得分:0)

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