私はちょうどString#split
と、次の奇妙な行動を発見しました:スプリット( '')がスマートにしようとしているのはなぜですか?
"a\tb c\nd".split
=> ["a", "b", "c", "d"]
"a\tb c\nd".split(' ')
=> ["a", "b", "c", "d"]
"a\tb c\nd".split(/ /)
=> ["a\tb", "c\nd"]
The source(2.0.0からstring.c)が200行以上の長さであり、このような流路を含んでいます。
/* L 5909 */
else if (rb_enc_asciicompat(enc2) == 1) {
if (RSTRING_LEN(spat) == 1 && RSTRING_PTR(spat)[0] == ' '){
split_type = awk;
}
}
その後、 awk
スプリットタイプのコードでは、実際の引数はもはや使用されず、平文と同じになりますsplit
。
- 他に誰かがこれが何とか壊れていると感じていますか?
- これには十分な理由がありますか?
- このような「魔法」は、ほとんどの人がRubyで考えるよりも頻繁に起こりますか?
なぜ「賢すぎる」と記録されているのですか?これは、テキストの分割に使用する代替パターンを渡すことで選択した場合に上書きできる、意図したデフォルトの動作です。 –
あまりにもスマートな私は、すべての空白文字で分割したいルビーの推測を意味します。ここでは、文字通りスペースで分割するように指示しています。 –
私は、おそらくこの質問に対する一般的で満足のいく答えがないことを認識しているので、この質問を閉じるために投票するつもりです。すべてのあなたの答えとコメントありがとう! –