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 バインディングの引数の数を示すために使用されます。別のオペレーターを選択することを強くお勧めします。

また、演算子のシャッフルは評価時ではなくコンパイル時 (ファイルのロード時) に発生するため、すべての演算子テーブルの変更は、それらを使用するファイルをロードして解析する前に行う必要があることに注意してください。Enterキーを押すたびに新しいコンパイルがあるため、REPLはこの問題を隠します。

さらに、何かがコンパイルされるものを確認したい場合 (オペレーターに役立ちます)、それをmessage()呼び出し内にラップします。つまり、REPL でmessage(1 + 2)生成されます。1 +(2)

于 2012-04-14T04:11:01.843 に答える
0

これは、最近修正された Mac 環境のバグのようです。私は Io の MacPorts ビルドに取り組んでいましたが、環境の「20090105」バージョンにはこのバグがあります。Windows/Linux バイナリで同じコードを実行すると、期待どおりの動作が得られました。

于 2012-04-16T18:33:42.020 に答える