有人能解释一下下面两段代码的区别吗?两者的结尾都有一个!。第一个版本只是速记吗?

print "Who are you?"
user_input = gets.chomp.downcase!

print "Who are you?"
user_input = gets.chomp
user_input.downcase!

最佳答案

编辑:在ruby方法名的末尾有一个感叹号(又名“bang”)表示“小心处理”。马茨本人:
砰的一声(!)不意味着“破坏性”或缺乏它意味着
也有破坏性。bang符号的意思是“bang版本
比无爆炸危险;小心处理”。自从
ruby有很多“破坏性”方法,如果bang符号跟随
我的观点是,每个ruby程序都会充满刘海,因此很难看。
(有关完整的线程,请参见注释中的@sawa链接。)
对于所讨论的方法,downcase正在复制给定的字符串,修改该字符串,并作为结果返回该副本。而downcase!修改字符串本身。
在第一种情况下,修改存储在gets.chomp中的变量,在第二种情况下修改user_input
注意,如果在最后一行调用user_input.downcase(而不是user_input.downcase!),它实际上不会更改user_input,它只返回字符串的副本并使副本小写。

09-10 20:37