で次の奇妙な動作を発見しました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"]
ソース(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 で考えるよりも頻繁に発生するのでしょうか?