Если у вас есть подкласс X массива, то выполнение X#to_a
возвращает объект массива, а выполнение X#to_ary
возвращает объект x.
Хотя я понимаю, что to_a
означает «Я могу быть преобразован в массив», а to_ary
означает «Я веду себя как массив», я не понимаю, почему первый реализует изменение класса, а второй нет.
Кроме того, не является ли возврат подкласса Array достаточным для to_a
согласно принципу подстановки Лискова?