元ネタ
コード
irb(main):001:0> 1+++++++++++++++++++++++1
=> 2
irb(main):002:0> 1-----------------------1
=> 0
irb(main):003:0> 1----------------------1
=> 2
irb(main):004:0> 1+++++---------+++-+++---+1
=> 0
解説
解説というほどでもないですが,そもそもRubyにはJavaScriptやC/C++と異なりインクリメント(デクリメント)演算子++
(--
)は存在しません.
ということで,単純に以下のように先頭の+
は二項演算子として解釈され,残りは単項演算子として解釈されるというだけの話です.そもそも1+++1
が1.+(++1)
だと知っていればどうということはないですね.
他の言語
Python
Pythonにもインクリメント演算子はなく同様の振る舞いをします.
>>> 1+++++++++++++++++++1
2
>>> 1-------------------1
0
Rust
Rustにもインクリメント演算子はありません.
Rustには単項演算子の+
が存在しないため 1++1
はコンパイルエラーになってしまいますが 1--1
は合法です.
fn main() {
// println!("{}", 1++1); // error: expected expression, found `+`
println!("{}", 1-------------------1); // => 0
}
あとはC++とJavaScriptくらいしかわからないのでネタ切れです.