我刚刚发现了以下奇怪的行为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 类型的代码中,实际参数甚至不再使用,并且与 plain 相同split
。
- 有没有人觉得这有点坏了?
- 这有充分的理由吗?
- 在 Ruby 中,这种“魔法”是否比大多数人想象的更频繁?