5

私はIo言語の演算子を試しています。CLIではすべて正常に機能しますが、代わりにコードをファイルに入れるとすぐに問題が発生します。

これは小さな例です(+と同じことを行う演算子+++を作成します)

OperatorTable addOperator("+++", 3)      # Say that +++ should be an operator
Number +++ := method(v, call target + v) # Define the slot +++ on numbers
(30 +++ 40) println                      # Try it out!

前述のように、これはCLIで正常に機能しますが、ファイルで実行しようとすると機能しません。演算子が定義される前にファイルが事前解析されているという事実と関係があると思いますが、どうすればそれを回避できますか?

4

1 に答える 1

4

これは、Ioのオペレーターシャッフラーの制限です。何が起こるかは大まかにこれです:

  1. ソースファイルがロードされ、トークン化されます(この段階では、演算子は不明です)
  2. オペレーターシャッフラーが実行されます
  3. コードが評価されます

残念ながら、オペレーターシャッフラーは、実行後に操作していることになります。

于 2010-12-05T03:44:08.747 に答える