我正在学习Ruby,并且我已经看到方法名称末尾的感叹号按惯例意味着该方法以某种方式修改self
。那么为什么不Array#delete
以slice!
之类的感叹号结束,因为delete
会删除self
中的元素?我错过了一些基本的东西吗?
答案 0 :(得分:15)
引用Matz(Ruby的总工程师):
爆炸(!)并不意味着“破坏性”,也不缺乏意味着非破坏性 破坏性的。爆炸标志意味着“爆炸版本更多 比非爆炸对手更危险;小心处理“。
由于Array#delete
没有危险性较低的对应物,因此不需要感叹号。
答案 1 :(得分:4)
“爆炸”方法并不意味着它会修改接收器。它表示方法是现有方法的更危险版本。请参阅差异的David A. Black's description和更改Ruby 2.0的response to a request。
这是一种非常常见的误解。请注意投票率很高的错误的答案here。