2013-03-09 93 views
2

大衛·布萊克在他的書中說:破壞性的方法和爆炸方法在Ruby中

危險可能意味着無論寫方法的人希望它的意思。在內置類的情況下,它通常意味着這種方法,不像它的非爆炸等效, 永久修改它的接收器。但它並不總是:退出!是退出的一種危險的替代方式,因爲它不會在退出程序的時候運行任何終結器。

危險! (一種替換字符串替換字符串中的匹配模式的方法)部分地是它改變了它的接收器,部分地,如果沒有發生變化,它會返回nil - 不像sub,它總是返回原始字符串的副本更換(或不更換)。

雖然以上所有內容都可以理解,但無法理解他在下面所說的內容。

此外,不要假設爆炸方法和破壞性方法之間有直接關係。它們經常是重合的,但它們並不是一回事。

基於什麼概念,我們可以進行分類,把一個方法的破壞性或危險的名單?

回答

1

破壞性方法是那些改變被調用對象的屬性值的方法。所以他所說的可以重申爲:

不要以爲method!會改變屬性的值。這往往是這種情況,但不是一個規則。

+0

好的。正如你所說的那樣,「破壞性方法就是那些改變被調用對象的屬性值的方法與'bang'方法相同嗎?那麼爲什麼他說他們有時是相同的?*你回答了*,但有時不相同 - 他在這裏的含義是什麼? – 2013-03-09 16:25:24

+0

這意味着你(或其他程序員)可以定義一個名爲'destroy!'的方法,但實際上它不會做任何破壞性的操作。爆炸符號只是一個約定,由程序員決定是否遵循它。因此,當你閱讀其他人的代碼時,你也不能認爲他們遵循了這個慣例。 – Mchl 2013-03-09 16:37:49