Это, вероятно, предполагаемое поведение, а не ошибка. Согласно документации, разделение массива:
Делит массив на один или несколько субрайров на основе значения разграничения или результата дополнительного блока.
Это не дает никаких гарантий о смежных или ведущих пространствах.
С другой стороны, Рубиновая основная документация за String#split
состояния:
Если шаблон является строкой, то его содержимое используется в качестве разделителя при разделении Str. Если шаблон представляет собой одно пространство, STR разделен на пробел, с ведущими пробелами и игнорируемыми непрерывными персонажами отдачи.
Как вы можете видеть, поведение, которое вы ожидаете, работает только с пробелом, а не для любой строки.
"abc ccc def ".split("c")
=> ["ab", " ", "", "", " def "]
При разделении массива концепция «пробела» на самом деле больше не имеет смысла. Поэтому я думаю, что поведение является разумным, если, возможно, противоречит сначала.