我只是在学习Ruby而且我不太了解有和没有'!'的几个Ruby方法之间的区别在末尾。有什么不同?为什么我会使用一个而不是另一个?
答案 0 :(得分:33)
末尾带有感叹号的方法通常称为爆炸方法。一个爆炸方法不一定修改它的接收器,也不能保证没有感叹号的方法不会。
在this blog post中解释得非常好。引用帖子:
!在方法名称中以!结尾! 意思是“这种方法很危险” - 或者, 更准确地说,这种方法是 否则的“危险”版本 等效方法,名称相同 减去! “危险”是相对的;该 !什么都没有意义,除非 它所对应的方法名称 一个类似的,但没有轰炸的方法名称。
和
!并不意味着“这种方法 改变它的接收器。“很多 “危险”的方法会改变他们的 接收器。但有些人没有。我重复: ! 并不意味着该方法发生了变化 它的接收器。
答案 1 :(得分:12)
非bang downcase()方法只返回一个代表你字符串向下的新对象。
bang版本会修改你的字符串。
my_text = "MY TEXT"
my_new_text = my_text.downcase
puts my_new_text # will print out "my text"
puts my_text # will print out "MY TEXT" - the non-bang method doesn't touch it
my_text.downcase!
puts my_text # will print out "my text". The bang version has modified the object you're calling the method on