なぜ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への議論を提供することを覚えているならば、あなたの質問は消えます。1つがないと、chompは、文字列にない改行とキャリッジリターンのみを削除します。bang augmented chompは、(ドキュメントによると)変更を加えていないため、nilを返します。
簡単に言えば、あなたは本当に書きたかったのです:
"HELLO ".chomp(" ").downcase
=> hello
と:
"HELLO ".chomp!(" ").downcase
=> hello
細かいマニュアルから:
chomp(separator = $ /)→new_str
str
String
の末尾から指定されたレコード区切り文字が削除された新しいレコードを返します(存在する場合)。デフォルトのRubyレコード区切り文字から変更されていない場合は、キャリッジリターン文字も削除されます(つまり、、、、およびが削除されます)。$/
chomp
\n
\r
\r\n
とのためにchomp!
:
chomp!(separator = $ /)→strまたはnil
、return strについて説明したように、または変更が行われなかった場合は、 strを所定の位置に変更します。
String#chomp
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
:
それらは文字列から空白を削除します。