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