-1

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

a = "lower"
a = a.downcase
print a

Compiler return: lower

但是,如果我尝试:

a = "lower"
a = a.downcase!
print a

Compiler return: nil

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

4

4 回答 4

10

低调!→ str 或 nil

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

文档:字符串#downcase!

于 2013-06-05T11:13:56.883 回答
6

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 
于 2013-06-05T11:14:57.717 回答
1

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

的返回值downcase!nil如果字符串没有被修改,或者是新修改的字符串。在后一种情况下,字符串 ina被覆盖。正确的使用方法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
于 2013-06-05T11:13:43.983 回答
1

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

于 2013-06-05T11:15:03.533 回答