有人说 bang!
表示方法“可能”修改对象。
在这个例子中:
foo = "A STRING"
foo.downcase
puts foo
# => A STRING
foo.downcase!
puts foo
# => a string
爆炸符号似乎引起了副作用。obj.method!
相当于obj = obj.method
?_ 如果不是,为什么?有没有这两个表达式不等价的方法?
有人说 bang!
表示方法“可能”修改对象。
在这个例子中:
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.
所有这些都只是命名约定,开发人员选择提供两个名称相似的方法。