Ruby“.downcase! “和”小写“混乱

我刚刚开始Ruby编程。 我读过了downcase和downcase之间的区别! 在Ruby中 。 但是我在实践中遇到了一个有趣的问题,这里是代码:

a = "lower" a = a.downcase print a Compiler return: lower 

但是,如果我尝试:

 a = "lower" a = a.downcase! print a Compiler return: nil 

但是,如果“a = LOWER”,则两个版本的代码都返回“lower”

downcase! →str或nil

下载str的内容, 如果没有进行任何更改则返回nil 。 注意:案例替换仅在ASCII区域有效。

文档: 字符串#downcase!

a.downcase! 直接修改“a” – 您不需要将结果分配给“a”。

 1.9.3p362 :003 > a = "A" => "A" 1.9.3p362 :004 > a.downcase! => "a" 1.9.3p362 :005 > puts a a => nil 1.9.3p362 :006 > a = "A" => "A" 1.9.3p362 :007 > a.downcase => "a" 1.9.3p362 :008 > puts a A => nil 

分配变量= variable.downcase的危险! 如果变量已经是小写,那么你只需将变量设置为nil – 可能不是你的意图。

 1.9.3p362 :001 > variable = 'a' => "a" 1.9.3p362 :002 > variable = variable.downcase! => nil 1.9.3p362 :003 > puts variable => nil 

downcase! 如果没有进行任何更改,将返回nil。 你可以用ri downcase!来检查它ri downcase!

downcase! 是一种就地修改字符串的方法(而downcase创建一个新的字符串实例)。

downcase!的返回值downcase! 如果字符串未被修改,则为nil ,或者是新修改的字符串。 在后一种情况下, a的字符串会被覆盖。 使用downcase!的正确方法downcase! 是:

 a = "LOWER" a.downcase! # no assignment to a here print a # prints "lower", the original "LOWER" is lost 

对于downcase

 a = "LOWER" print a.downcase # a is still "LOWER", but "lower" gets printed 

作为一般经验法则:如果方法结束了! ,该方法将覆盖值或修改变量中的状态。

另外在你的情况下:

 print "lower".downcase! # prints nil, because "lower" is already written in lower case