-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への議論を提供することを覚えているならば、あなたの質問は消えます。1つがないと、chompは、文字列にない改行とキャリッジリターンのみを削除します。bang augmented chompは、(ドキュメントによると)変更を加えていないため、nilを返します。

簡単に言えば、あなたは本当に書きたかったのです:

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

と:

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

細かいマニュアルから:

chomp(separator = $ /)→new_str

strStringの末尾から指定されたレコード区切り文字が削除された新しいレコードを返します(存在する場合)。デフォルトのRubyレコード区切り文字から変更されていない場合は、キャリッジリターン文字も削除されます(つまり、、、、およびが削除されます)。$/chomp\n\r\r\n

とのためにchomp!

chomp!(separator = $ /)→strまたはnil

、return strについて説明したように、または変更が行われなかった場合は、 strを所定の位置に変更します。String#chompnil

ですから、彼らがしていると思うこと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 に答える