使用爆炸?

时间:2013-02-19 01:10:45

标签: ruby

有些人说爆炸!表示方法“可能”修改对象。

在这个例子中:

foo = "A STRING"
foo.downcase
puts foo
# => A STRING
foo.downcase!
puts foo
# => a string
爆炸符号似乎引起副作用。 obj.method!是否等同于obj = obj.method?如果没有,为什么?是否存在这两种表达式不相等的方法?

1 个答案:

答案 0 :(得分:6)

爆炸!在方法名称中表示"危险"一般来说。

  • 这是一种方法命名约定,是运营商,不是规则。

  • 通常表示警告,突变或不可逆转,或引发异常等。

我们经常使用"!"作为一种命名惯例来消除两种类似的方法:

  • 正常方法名称返回结果。

  • "!"方法名称有危险。

制作"!"的例子。意思是突变:

obj.change #=> return a new object that has the change.
obj.change! #=> do the change by mutating the object.

制作"!"的例子。意思是"引发错误":

obj.save #=> if the object can't save, then return false.
obj.save! #=> if the object can't save, then raise an exception.

制作"!"的例子。意思是"危险"或"无法撤消":

obj.exit #=> exit normally, running all exit handlers.
obj.exit! #=> exit immediately, skipping all exit handlers.

所有这些只是命名约定,开发人员选择提供两个同名的方法。