為什么Ruby不支持i ++或i--(遞增/遞減運算符)?前/后遞增/遞減運算符(++和--)是非常標準的編程語言語法(至少對于過程語言和面向對象語言)。為什么Ruby不支持它們?我知道你可以用+=和完成同樣的事情-=,但是排除這樣的東西似乎有點奇怪,特別是因為它是如此簡潔和傳統。例:i = 0 #=> 0i += 1 #=> 1i #=> 1i++ #=> expect 2, but as far as I can tell,
#=> irb ignores the second + and waits for a second number to add to i我理解Fixnum是不可改變的,但如果+=能夠實現一個新的Fixnum并設置它,為什么不這樣做++呢?包含=角色的作業的一致性是唯一的原因,還是我錯過了什么?
3 回答

開滿天機
TA貢獻1786條經驗 獲得超13個贊
一個原因是到目前為止,每個賦值運算符(即更改變量的運算符)都包含=
在其中。如果添加++
和--
,那情況就不一樣了。
另一個原因是人們的行為++
和--
經常混淆。i++
例證:你的例子中的返回值實際上是1,而不是2(i
然而,新值將是2)。

蠱毒傳說
TA貢獻1895條經驗 獲得超3個贊
它在OO語言中并不常見。事實上,++
Smalltalk中沒有這種語言,它創造了“面向對象編程”這一術語(而Ruby語言受其影響最大)。你的意思是它在C語言和傳統語言中非常模仿C.Ruby確實有一種類似C語言的語法,但它并不是堅持C語言傳統的奴隸。
至于為什么它不在Ruby中:Matz不想要它。這才是真正的終極原因。
Smalltalk中沒有這樣的東西的原因是因為它是語言最重要的哲學的一部分,分配變量從根本上講是一種不同于向對象發送消息的東西 - 它在不同的層面上。這種想法可能影響了Matz設計Ruby。
將它包含在Ruby中并不是不可能的 - 您可以輕松編寫一個將所有內容++
轉換為的預處理器+=1
。但顯然Matz并不喜歡操作員做過“隱藏任務”的想法。擁有一個隱藏整數操作數的運算符也似乎有點奇怪。該語言中沒有其他運算符以這種方式工作。
- 3 回答
- 0 關注
- 996 瀏覽
添加回答
舉報
0/150
提交
取消