有人能解释一下下面两段代码的区别吗?两者的结尾都有一个!
。第一个版本只是速记吗?
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
,它只返回字符串的副本并使副本小写。