web-dev-qa-db-ja.com

Rubyにインクリメント演算子(++)はありませんか?

可能性のある複製:
なぜRubyはfixnumでi ++またはi—をサポートしないのですか?

Rubyにインクリメント演算子がないのはなぜですか?

例えば.

i++
++i

++演算子は他の何かに使用されていますか?これには本当の理由がありますか?

199
Skizit

Rubyには、プリ/ポストインクリメント/デクリメント演算子はありません。たとえば、x++またはx--は解析に失敗します。さらに重要なことは、++xまたは--xは何もしないことです!実際、それらは複数の単項前置演算子として振る舞います:-x == ---x == -----x == ......数値をインクリメントするには、単にx += 1と書きます。

「Rubyの新参者が知っておくべきこと」( archivemirror )から引用

それは私が今までできたよりも良いことを説明しています。

編集:そして、言語の著者自身からの理由( source ):

  1. ++および-はRubyの予約演算子ではありません。
  2. Cのインクリメント/デクリメント演算子は、実際には隠された割り当てです。オブジェクトではなく変数に影響します。メソッドを介して割り当てを完了することはできません。 Rubyは代わりに+ = /-=演算子を使用します。
  3. selfを割り当てのターゲットにすることはできません。さらに、整数1の値を変更すると、プログラム全体で深刻な混乱が生じる可能性があります。
230
Dave

Matzによる投稿 から:

(1)++および-は、Rubyの予約演算子ではありません。

(2)Cのインクリメント/デクリメント演算子は、実際には隠された割り当てです。オブジェクトではなく変数に影響します。メソッドを介して割り当てを完了することはできません。 Rubyは代わりに+ = /-=演算子を使用します。

(3)selfを割り当てのターゲットにすることはできません。さらに、整数1の値を変更すると、プログラム全体で深刻な混乱が生じる可能性があります。

                      matz.
24
mikej

PHPやCとは異なり、Rubyのすべてがオブジェクトであるため、表記法が利用できるとは思いません。

確かにPHPで$var=0; $var++を使用できますが、それはオブジェクトではなく変数であるためです。したがって、$var = new stdClass(); $var++はおそらくエラーをスローします。

私はRubyやRoRプログラマーではないので、誰かが上記を検証したり、不正確な場合は修正したりできると確信しています。

3
Martin Bean