簡體   English   中英

Ruby“ .downcase! 和“小寫”的混亂

[英]Ruby “.downcase! ” and “downcase” confusion

我剛剛開始Ruby編程。 我讀過小寫和小寫之間的區別! 在Ruby中 但是我在實踐中遇到一個有趣的問題,下面是代碼:

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

Compiler return: lower

但是,如果我嘗試:

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

Compiler return: nil

但是,如果“ a = LOWER”,則兩個版本的代碼均返回“ lower”

小寫! →str或nil

將str的內容轉換為小寫, 如果未進行任何更改 ,則返回nil 注意:大小寫替換僅在ASCII區域有效。

文檔: String#downcase!

a。小寫! 直接修改“ 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! 是一種就地修改字符串的方法(而downcase會創建一個新的字符串實例)。

downcase!的返回值downcase! 如果未修改字符串或新修改的字符串,則為nil 在后一種情況下, a的字符串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

小寫! 如果未進行任何更改,將返回nil。 您可以使用ri downcase!檢查它ri downcase!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM