可能性のある複製:
なぜRubyはfixnumでi ++またはi—をサポートしないのですか?
Rubyにインクリメント演算子がないのはなぜですか?
例えば.
i++
++i
++
演算子は他の何かに使用されていますか?これには本当の理由がありますか?
Rubyには、プリ/ポストインクリメント/デクリメント演算子はありません。たとえば、
x++
またはx--
は解析に失敗します。さらに重要なことは、++x
または--x
は何もしないことです!実際、それらは複数の単項前置演算子として振る舞います:-x == ---x == -----x == ......
数値をインクリメントするには、単にx += 1
と書きます。
「Rubyの新参者が知っておくべきこと」( archive 、 mirror )から引用
それは私が今までできたよりも良いことを説明しています。
編集:そして、言語の著者自身からの理由( source ):
- ++および-はRubyの予約演算子ではありません。
- Cのインクリメント/デクリメント演算子は、実際には隠された割り当てです。オブジェクトではなく変数に影響します。メソッドを介して割り当てを完了することはできません。 Rubyは代わりに+ = /-=演算子を使用します。
- selfを割り当てのターゲットにすることはできません。さらに、整数1の値を変更すると、プログラム全体で深刻な混乱が生じる可能性があります。
Matzによる投稿 から:
(1)++および-は、Rubyの予約演算子ではありません。
(2)Cのインクリメント/デクリメント演算子は、実際には隠された割り当てです。オブジェクトではなく変数に影響します。メソッドを介して割り当てを完了することはできません。 Rubyは代わりに+ = /-=演算子を使用します。
(3)selfを割り当てのターゲットにすることはできません。さらに、整数1の値を変更すると、プログラム全体で深刻な混乱が生じる可能性があります。
matz.
PHPやCとは異なり、Rubyのすべてがオブジェクトであるため、表記法が利用できるとは思いません。
確かにPHPで$var=0; $var++
を使用できますが、それはオブジェクトではなく変数であるためです。したがって、$var = new stdClass(); $var++
はおそらくエラーをスローします。
私はRubyやRoRプログラマーではないので、誰かが上記を検証したり、不正確な場合は修正したりできると確信しています。