我刚刚开始Ruby编程。我读过Difference Between downcase and downcase! in Ruby。但是我在实践中遇到了一个有趣的问题,这里是代码:
a = "lower"
a = a.downcase
print a
Compiler return: lower
但是,如果我尝试:
a = "lower"
a = a.downcase!
print a
Compiler return: nil
但是,如果“a = LOWER”
,则两个版本的代码都会返回“lower”答案 0 :(得分:9)
downcase! →str或nil
如果没有进行任何更改,则下载str的内容,返回nil 。注意:案例替换仅在ASCII区域有效。
答案 1 :(得分:5)
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
答案 2 :(得分:1)
downcase!
是一种就地修改字符串的方法(而downcase
创建一个新的字符串实例)。
如果字符串尚未修改,则downcase!
的返回值为nil
,或新修改的字符串。在后一种情况下,a
中的字符串会被覆盖。使用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
答案 3 :(得分:1)
downcase!如果没有进行任何更改,将返回nil。
您可以使用ri downcase!