2017-11-01 19 views
2

は、私がこれを持っていると仮定し一貫性のないルビー.split行動

b = "hello|" 

私がしなければ:

a.split("|") #=> ["", "hello"] 

は、今私が持っていると言う

b.split("|") #=> ["hello"] 

なぜこれが起こっていますか?最初の例と同様に、結果は["hello", ""]になると思いました。これは一貫性のない方法であるsplitです。それとも、私が気づいていない内なる働きについて何かありますか?

+0

おそらく一貫性はなく、文書化されています。 –

+1

@sawa 5年前にこれを聞いたことがあります:「分割の始めと終わりに空の文字列」(https://stackoverflow.com/q/13273318/477037)。 [文字列の分割時に空のアイテムが削除されるのを避けるにはどうすればよいですか?](https://stackoverflow.com/q/5453051/477037)の複製としてマークされています。 – Stefan

答えて

9

この現象は、documentationに記載されている:

限界パラメータが省略された場合、ヌルフィールドは を抑制している末尾。

あなただけのドキュメントの提供として、正または負の制限を追加し、空の文字列を末尾に保存したい場合は

"hello|".split('|', 2) 
#=> ["hello", ""] 
"hello|||".split('|', -1) 
#=> ["hello", "", "", ""] 

負の場合は、数に制限はありません末尾のNULLフィールドは表示されません。

+0

ありがとう、ただ2つの説明:a)この文脈では、 "ヌルフィールド"とは何か? b)負の数も働くのはなぜですか? – daremkd

+2

@daremkd a)空のフィールドb)この方法で実装されたためです。 – Stefan

+0

@Stefan私はおそらく負の数がここでより適切だろうと思う、もし文字列が "hello |||" 2は空の文字列を1つだけ返します。 – daremkd

関連する問題