2013-03-09 47 views
2

大卫·布莱克在他的书中说:破坏性的方法和爆炸方法在Ruby中

危险可能意味着无论写方法的人希望它的意思。在内置类的情况下,它通常意味着这种方法,不像它的非爆炸等效, 永久修改它的接收器。但它并不总是:退出!是退出的一种危险的替代方式,因为它不会在退出程序的时候运行任何终结器。

危险! (一种替换字符串替换字符串中的匹配模式的方法)部分地是它改变了它的接收器,部分地,如果没有发生变化,它会返回nil - 不像sub,它总是返回原始字符串的副本更换(或不更换)。

虽然以上所有内容都可以理解,但无法理解他在下面所说的内容。

此外,不要假设爆炸方法和破坏性方法之间有直接关系。它们经常是重合的,但它们并不是一回事。

基于什么概念,我们可以进行分类,把一个方法的破坏性或危险的名单?

回答

1

破坏性方法是那些改变被调用对象的属性值的方法。所以他所说的可以重申为:

不要以为method!会改变属性的值。这往往是这种情况,但不是一个规则。

+0

好的。正如你所说的那样,“破坏性方法就是那些改变被调用对象的属性值的方法与'bang'方法相同吗?那么为什么他说他们有时是相同的?*你回答了*,但有时不相同 - 他在这里的含义是什么? – 2013-03-09 16:25:24

+0

这意味着你(或其他程序员)可以定义一个名为'destroy!'的方法,但实际上它不会做任何破坏性的操作。爆炸符号只是一个约定,由程序员决定是否遵循它。因此,当你阅读其他人的代码时,你也不能认为他们遵循了这个惯例。 – Mchl 2013-03-09 16:37:49