Почему split ('') пытается быть (слишком) умным?
Я только что обнаружил следующее странное поведение с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"]
Источник (string.c из 2.0.0) имеет длину более 200 строк и содержит такой отрывок:
/* L 5909 */
else if (rb_enc_asciicompat(enc2) == 1) {
if (RSTRING_LEN(spat) == 1 && RSTRING_PTR(spat)[0] == ' '){
split_type = awk;
}
}
Позже, в коде дляawk
тип split, фактический аргумент даже больше не используется и делает то же самое, что и обычныйsplit
.