OperatorTable addAssignOperator(":", "myAssignMethod")
"foo" : "bar"
Run Code Online (Sandbox Code Playgroud)
这给出了一个错误,即Sequence不响应":"(":"仍被视为消息,而不是操作符).
我认为它应该被评估myAssignMethod("foo", "bar")(自"foo" = "bar"成为updateSlot("foo", "bar")),但事实并非如此.然而:
OperatorTable addAssignOperator(":", "myAssignMethod")
doString("\"foo\" : \"bar\"")
Run Code Online (Sandbox Code Playgroud)
它可以正常工作,myAssignMethod并被调用.那么如何doString()在文件主代码中工作期间获得代码上发生的任何处理?
:是有效的标识符,具有特殊含义.它用于指示objective-c绑定中的参数数量.强烈建议您选择其他操作员.
另请注意,所有操作员表修改必须在您正在加载和解析它们的文件之前完成,因为操作符重排是在编译时(加载文件时)而不是在评估时发生的.REPL隐藏了这个问题,因为每次按Enter键都会有一个新的编译.
此外,如果您想查看将要编译的内容(对运算符有用)将其包装在message()调用中.即,message(1 + 2)将1 +(2)在REPL中产生.