有人說爆炸!
表示方法「可能」修改對象。使用砰砰聲?
在這個例子中:
foo = "A STRING"
foo.downcase
puts foo
# => A STRING
foo.downcase!
puts foo
# => a string
砰符號似乎引起的副作用。是obj.method!
相當於obj = obj.method
?如果不是,爲什麼?有兩種表達方式不對等的方法嗎?
有人說爆炸!
表示方法「可能」修改對象。使用砰砰聲?
在這個例子中:
foo = "A STRING"
foo.downcase
puts foo
# => A STRING
foo.downcase!
puts foo
# => a string
砰符號似乎引起的副作用。是obj.method!
相當於obj = obj.method
?如果不是,爲什麼?有兩種表達方式不對等的方法嗎?
砰!在方法名中通常意味着「危險」。
它是一種方法的命名約定,不操作,不的規則。
這通常意味着警告或突變,或不可逆轉,或將引發異常等
我們經常用 「!」作爲命名慣例來區分兩種類似的方法:
正常的方法名返回結果。
「!」方法名稱有些危險。
組成「!」的例子,意義突變:
obj.change #=> return a new object that has the change.
obj.change! #=> do the change by mutating the object.
編寫「!」的例子,意思是「產生錯誤」:
obj.save #=> if the object can't save, then return false.
obj.save! #=> if the object can't save, then raise an exception.
組成「!」的例子,意味着「危險」或「無法挽回」:
obj.exit #=> exit normally, running all exit handlers.
obj.exit! #=> exit immediately, skipping all exit handlers.
所有這些都只是命名約定,在開發商已經選擇以提供兩個類似命名的方法。
您是否問爆炸方法在功能上等同於重新分配?在大多數情況下,可能是的,但它確實取決於方法。 – 2013-02-19 01:14:52
@ZachKemp是的,這正是我所要求的。 – Tom 2013-02-19 01:16:16
爆炸是函數名稱的一部分。它只是方法名稱的一部分。 – 2013-02-19 01:21:59