【问题标题】:destructive method and bang method in RubyRuby 中的破坏性方法和 bang 方法
【发布时间】:2013-03-09 16:13:45
【问题描述】:

David A. Black 在他的书中说:

Dangerous 可以表示编写该方法的人想要的任何含义。在内置类的情况下,它通常意味着这个方法,不像它的非爆炸等价物, 永久修改其接收器。但并不总是这样:退出!退出程序是一个危险的替代方案,因为它在退出程序时不会运行任何终结器。

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

虽然上面都明白了,但是没看懂下面他想说什么。

此外,不要假设 bang 方法和破坏性方法之间存在直接关联。它们经常重合,但它们不是一回事。

我们可以根据什么概念对方法进行分类并将其放入破坏性或危险性列表中?

【问题讨论】:

    标签: ruby


    【解决方案1】:

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

    不要假设method! 会改变属性的值。这种情况经常发生,但不是规则。

    【讨论】:

    • 好的。正如您所说,Destructive methods are those, that change the value of an attribute of the object they're called onbang 方法相同,对吗?那为什么他说他们有时相同-你回答的,但有时不一样-他在这里的意思是什么?
    • 这意味着您(或其他程序员)可以定义一个名为destroy! 的方法,但实际上它不会执行任何破坏性操作。 bang 符号只是一种约定,由程序员决定是否遵循它。因此,当您阅读其他人的代码时,您也不能假设他们遵循该约定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    相关资源
    最近更新 更多