定義されている演算子とその優先順位は以下の通りです。
| 高い | @++, @-- | ||
| ** | |||
| !@, -@, ++@, --@ | |||
| *, / | |||
| +, - | |||
| ==, <, >, <=, >=, != | |||
| && | |||
| || | |||
| 低い | =, :=, +=, -=, *=, /=, **= |
単項演算子は @ と書かれた部分にオブジェクトが置かれます。
1 + 2 という式は 1.(+)(2)、 !cond という式は cond.(!@)() と解釈されます。
それぞれ、「1 に対し (+) というメッセージを 2 を引数として送る」、 「cond に対し (!@) というメッセージを引数なしで送る」という意味です。
=, :=, +=, -=, *=, /=, **=, ++@, --@, @++, @-- の 11 の演算子は、 レシーバがクオートされます。
x = 1 という式は ('x).(=)(1)、x++ という式は ('x).(@++)() と解釈されます。
n != 0 という式は、n.(==)(0).(!@)() と解釈されます。