-3

为什么chomp允许链接但chomp!不允许?例如:

"HELLO ".chomp.downcase
#> hello
"HELLO ".chomp!.downcase
#> nil

另一个有趣的例子:

"100 ".chomp.to_i
#> 100
"100 ".chomp!.to_i
#> 0

任何想法为什么会在字符串上发生这种行为,以及为什么会nil.to_i返回0

4

2 回答 2

2

如果您记得为 chomp 提供论据,您的问题就会消失。如果没有, chomp 只会删除字符串中不存在的换行符和回车符。bang 增强的 chomp 返回 nil 因为它没有进行任何修改(根据文档)。

简而言之,你真的很想写:

"HELLO ".chomp(" ").downcase
 => hello

和:

"HELLO ".chomp!(" ").downcase
 => hello 
于 2012-11-14T02:42:26.767 回答
2

来自精美手册

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

那些从字符串中删除空格。

于 2012-11-14T03:10:48.943 回答