为什么chomp
允许链接但chomp!
不允许?例如:
"HELLO ".chomp.downcase
#> hello
"HELLO ".chomp!.downcase
#> nil
另一个有趣的例子:
"100 ".chomp.to_i
#> 100
"100 ".chomp!.to_i
#> 0
任何想法为什么会在字符串上发生这种行为,以及为什么会nil.to_i
返回0
?
为什么chomp
允许链接但chomp!
不允许?例如:
"HELLO ".chomp.downcase
#> hello
"HELLO ".chomp!.downcase
#> nil
另一个有趣的例子:
"100 ".chomp.to_i
#> 100
"100 ".chomp!.to_i
#> 0
任何想法为什么会在字符串上发生这种行为,以及为什么会nil.to_i
返回0
?
如果您记得为 chomp 提供论据,您的问题就会消失。如果没有, chomp 只会删除字符串中不存在的换行符和回车符。bang 增强的 chomp 返回 nil 因为它没有进行任何修改(根据文档)。
简而言之,你真的很想写:
"HELLO ".chomp(" ").downcase
=> hello
和:
"HELLO ".chomp!(" ").downcase
=> hello
来自精美手册:
chomp(分隔符=$/) → new_str
返回一个新
String
的,给定的记录分隔符从str的末尾删除(如果存在)。如果$/
没有从默认的 Ruby 记录分隔符更改,则chomp
还会删除回车符(也就是说,它将删除\n
、\r
和\r\n
)。
和chomp!
:
chomp!(separator=$/) → str 或 nil
修改str为 描述的地方
String#chomp
,返回str,或者nil
如果没有进行修改。
所以既不chomp
也不chomp!
做你认为他们做的事。观察:
>> s = '100 '
=> "100 "
>> s.chomp
=> "100 "
>> s
=> "100 "
>> s.chomp!
=> nil
>> s
=> "100 "
因此,除非您告诉他们,否则没人关心尾随空格,默认情况下他们只是去掉尾随 EOL。
'100 '.chomp!
返回nil
,因为这就是文档所说的。没有进行替换,所以它返回nil
。
为什么nil.to_i
给你零?好吧,来自精美的手册:
to_i → 0
始终返回零。
这不会给歧义或解释留下太多空间。
我认为您实际上是在使用strip
方法系列而不是chomp
:
那些从字符串中删除空格。