我最近一直在重新学习Ruby,_replace()
页面说通常一种爆炸方法很危险,但它并没有说明原因。为什么爆炸方法很危险?
答案 0 :(得分:3)
您引用的页面包含:
通常对于内置类,危险通常(尽管不总是)意味着这种方法与非爆炸等效方法不同,会永久修改其接收器。
答案 1 :(得分:3)
标准库和普通宝石中有两种“危险”的含义:
方法改变接收器,而不是返回接收器的副本。示例:Array#map!
如果无法执行主要功能,则方法将引发异常。示例:ActiveRecord::Base#save!
,ActiveRecord::Base#create!
。例如,如果某个对象无法保存(因为它无效或其他),save!
将引发错误,而save
将返回false
。
我通常在我的代码中添加第三个含义:
Article#approve!
答案 2 :(得分:2)
惯例如下:
nil
而不是对象。nil
。答案 3 :(得分:2)
为什么爆炸方法很危险?
因为这是命名约定:如果有两种方法可以做同样的事情,那么你可以将它们命名为相同的名称,但更令人惊讶或更危险的方法就是爆炸。
例如,Process::exit
和Process::exit!
都退出当前运行的Ruby进程,但是bang版本将跳过运行可能安装的所有退出处理程序,因此,例如,跳过任何清理,您可能已安排应用程序何时退出。
答案 4 :(得分:-2)
不,这不危险。 Bang方法只是意味着他们正在修改对象本身,你应该小心。
答案 5 :(得分:-2)
删除我以前的回复,这一直不是真的。 这是一个很好的博客:http://dablog.rubypal.com/2007/8/15/bang-methods-or-danger-will-rubyist