2013-06-05 119 views
-1

我剛開始Ruby編程。我讀過Difference Between downcase and downcase! in Ruby。不過,我遇到在實踐中一個有趣的問題,這裏是代碼: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」

+0

什麼是「編譯器」?什麼是問題? – sawa

回答

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 
+0

沒有空洞類型。 'downcase!'可以返回字符串 –

+0

謝謝,我解決了。 – Matt

+0

謝謝,我覺得你的解釋很有幫助 – HaohaoLin

9

downcase! →str或nil

降低str的內容,如果沒有更改返回nil。注意:大小寫替換僅在ASCII區域有效。

文檔:String#downcase!

+3

你得到我的投票連接到手冊,顯然沒有閱讀。 –

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 = variable.downcase的危險!如果變量已經是小寫,那麼你只需將變量設置爲零 - 可能不是你的意圖。

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

=> nil 
1

downcase!如果沒有更改,將返回零。 你可以用ri downcase!