我已经看到方法名称末尾的感叹号按惯例表示该方法以某种方式修改 self . 为什么不 Array#delete 以感叹号结束,如 slice! ,因为 delete 从 self 删除了一个元素?我错过了什么基本的东西?
self
Array#delete
slice!
delete
引用Matz(Ruby的总工程师):
爆炸(!)并不意味着“破坏性”,也不缺乏意味着非破坏性 . 爆炸标志意味着“爆炸版本比非爆炸版本更危险;小心处理” .
由于 Array#delete 没有一个不那么危险的对应物,因此不需要感叹号 .
"bang"方法并不意味着它修改了接收器 . 它表示方法是现有方法的更危险版本 . 请参阅David A. Black's description的区别,并使用response to a request来更改Ruby 2.0 .
这是一种非常常见的误解 . 请注意非常高度投票的错误答案here .
2 回答
引用Matz(Ruby的总工程师):
由于
Array#delete
没有一个不那么危险的对应物,因此不需要感叹号 ."bang"方法并不意味着它修改了接收器 . 它表示方法是现有方法的更危险版本 . 请参阅David A. Black's description的区别,并使用response to a request来更改Ruby 2.0 .
这是一种非常常见的误解 . 请注意非常高度投票的错误答案here .