爲什麼chomp
允許鏈接,但chomp!
不是?例如:鏈接chomp/chompbang的方法
"HELLO ".chomp.downcase
#> hello
"HELLO ".chomp!.downcase
#> nil
另一個有趣的例子:
"100 ".chomp.to_i
#> 100
"100 ".chomp!.to_i
#> 0
爲什麼字符串出現這種情況
任何想法,爲什麼nil.to_i
回報0
?
爲什麼chomp
允許鏈接,但chomp!
不是?例如:鏈接chomp/chompbang的方法
"HELLO ".chomp.downcase
#> hello
"HELLO ".chomp!.downcase
#> nil
另一個有趣的例子:
"100 ".chomp.to_i
#> 100
"100 ".chomp!.to_i
#> 0
爲什麼字符串出現這種情況
任何想法,爲什麼nil.to_i
回報0
?
格格(分隔符= $ /)→new_str
返回一個新的
String
,從str(如果存在)的末尾刪除給定的記錄分隔符。如果$/
尚未從默認的Ruby記錄分隔符更改,則chomp
也會刪除回車符(即它將刪除\n
,\r
和\r\n
)。
和chomp!
:
格格(隔膜= $ /)→STR或零
:修改STR代替作爲用於
String#chomp
描述,返回STR,或者如果沒有修改則爲nil
。
因此,chomp
和chomp!
都不會做你認爲他們做的事。注意:
>> s = '100 '
=> "100 "
>> s.chomp
=> "100 "
>> s
=> "100 "
>> s.chomp!
=> nil
>> s
=> "100 "
所以沒有人在乎,除非你告訴他們,他們只是去掉默認尾隨EOLS尾隨空格。
'100 '.chomp!
返回nil
,因爲這就是文檔所說的。沒有進行替換,因此它返回nil
。
爲什麼nil.to_i
會讓你零?那麼,從fine manual:
to_i→0
始終返回零。
這不會給模糊或解釋留下太多空間。
我想你了strip
家庭的方法,而不是chomp
後實際上是:
那些從字符串中刪除空白。
如果你記得提供chomp參數,你的問題就會消失。沒有人,chomp將只刪除換行符和回車符,這些符號在字符串中不存在。 bang擴充的chomp返回nil,因爲它沒有做任何修改(按照文檔)。
簡單地說,你真的想寫:
"HELLO ".chomp(" ").downcase
=> hello
和:
"HELLO ".chomp!(" ").downcase
=> hello
或者只是切換到'strip'。 –
1)你的例子是錯誤的。 2)你應該分開你的兩個問題。 – sawa