有人说爆炸!
表示方法“可能”修改对象。使用砰砰声?
在这个例子中:
foo = "A STRING"
foo.downcase
puts foo
# => A STRING
foo.downcase!
puts foo
# => a string
砰符号似乎引起的副作用。是obj.method!
相当于obj = obj.method
?如果不是,为什么?有两种表达方式不对等的方法吗?
有人说爆炸!
表示方法“可能”修改对象。使用砰砰声?
在这个例子中:
foo = "A STRING"
foo.downcase
puts foo
# => A STRING
foo.downcase!
puts foo
# => a string
砰符号似乎引起的副作用。是obj.method!
相当于obj = obj.method
?如果不是,为什么?有两种表达方式不对等的方法吗?
砰!在方法名中通常意味着“危险”。
它是一种方法的命名约定,不操作,不的规则。
这通常意味着警告或突变,或不可逆转,或将引发异常等
我们经常用 “!”作为命名惯例来区分两种类似的方法:
正常的方法名返回结果。
“!”方法名称有些危险。
组成“!”的例子,意义突变:
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.
所有这些都只是命名约定,在开发商已经选择以提供两个类似命名的方法。
您是否问爆炸方法在功能上等同于重新分配?在大多数情况下,可能是的,但它确实取决于方法。 – 2013-02-19 01:14:52
@ZachKemp是的,这正是我所要求的。 – Tom 2013-02-19 01:16:16
爆炸是函数名称的一部分。它只是方法名称的一部分。 – 2013-02-19 01:21:59