У меня был случай, когда я работал с массивом структур и хотел transpose
их, хотя и встретил ошибку:
TypeError (no implicit conversion of Struct into Array)
Я думал (неправильно), что такое неявное преобразование просто вызывало to_a
для каждого объекта, если он доступен, хотя структуры имеют метод to_a
.
Итак, мой вопрос состоит из двух частей:
- если я могу, как мне реализовать это неявное преобразование?
- во-вторых, почему это так? Почему структуры не могут быть неявно преобразованы в массивы, но могут быть явно преобразованы?
Вот минимальный пример для выдачи ошибки:
S = Struct.new(:a, :b)
a = S.new(1, 2)
# => #<struct S a=1, b=2>
b = S.new(3, 4)
# => #<struct S a=3, b=4>
[a, b].transpose
# TypeError (no implicit conversion of S into Array)
[a, b].map(&:to_a)
# => [[1, 2], [3, 4]]
# Therefore, the extra step I'd have to take to transpose:
[a, b].map(&:to_a).transpose
# => [[1, 3], [2, 4]]
Заранее спасибо за любую помощь .