【问题标题】:Naming convention: Why Array#delete has no exclamation mark at the end?命名约定:为什么 Array#delete 末尾没有感叹号?
【发布时间】:2012-03-18 08:32:37
【问题描述】:

我正在学习 Ruby,并且我看到按照惯例,方法名称末尾的感叹号意味着该方法以某种方式修改了 self。为什么Array#delete 不像slice! 那样以感叹号结尾,因为deleteself 中删除了一个元素?我错过了一些基本的东西吗?

【问题讨论】:

  • 我的猜测是因为#delete 只能删除,所以不需要标记它。 #upper_case 之类的东西既可以分配给新创建的对象,也可以在确定使用时覆盖原始对象。
  • 是的,但是没有标志的#delete 也可以返回一个减去指定元素的克隆(这是我在没有标志的情况下所期望的):)

标签: ruby naming-conventions


【解决方案1】:

引用Matz(Ruby 的总工程师):

砰(!)并不意味着“破坏性”,也不是没有它意味着非 破坏性的。 bang 标志的意思是“bang 版本更 比它的非爆炸对应物危险;小心处理”。

由于Array#delete 没有危险性较低的对应物,因此不需要感叹号。

【讨论】:

    【解决方案2】:

    “bang”方法并不意味着它会修改接收器。它表明一种方法是现有方法的更危险版本。请参阅David A. Black's description 的区别,以及 response to a request 更改 Ruby 2.0。

    这是一个很常见的误解。注意投票率很高的错误答案here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-08
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 2014-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多