Ruby の
-1.abs
は,Integer リテラル -1 の abs メソッド(絶対値を取る)を呼び出している。結果は 1。
Rust の
-1_i32.abs()
は 1 ではなく -1 になる,と。
(_i32 は符号付き 32 bit 整数であることを表している)
マジかよ。
これは,Rust の場合,単項前置演算子よりメソッド呼び出しのほうが優先順位が高いからだそう。(『プログラミング Rust』p. 49)
ほえ〜
Ruby の -1.abs の – は単項演算子ですらない。リテラルの一部。
(追記 2019-01-01)というか,Ruby でこの – がもし単項演算子だったら,Ruby でもメソッド呼び出しのほうが優先順位が高いから Rust と同じ結果になったよね。