Достаточно ли «потому что так это определено»?
Возвращает self
. Если вызывается в подклассе Array
, преобразует приемник в объект Array
.
Возвращает self
.
Вероятно, нет, так что здесь мы идем в кроличью нору.
Помимо того факта, что документация окончательно утверждает, что это именно так, за рассуждения, возможно, действительно отвечает только Матц и др.
Если покопаться, может показаться, что to_ary
используется, когда происходят неявные преобразования типов. Его использование для неявных преобразований, похоже, также отражено в этом запросе функции. Другими словами, если объект отвечает на to_ary
, то его следует рассматривать как Array
, и таким образом он используется внутри. Таким образом, to_a
будет, когда вы (явно) хотите Array
, а не какой-то подкласс.
Да, возвращение подкласса по-прежнему будет удовлетворять LSP (при условии, что подкласс не решит радикально изменить поведение Array
так, чтобы этого не было), но принцип гласит только, что подкласс может быть заменен для его базового класса, не то, что это должно быть. В любом случае, я не совсем уверен, что это имеет значение, поскольку вы вызываете to_a
, явно запрашивая другой объект (чтобы согласиться с рассуждениями о неявных преобразованиях выше), и, таким образом, вы говорите, что вам не нужен заменить тип объекта.
person
Andrew Marshall
schedule
17.04.2012