Я хотел бы отметить, что уже есть встроенный метод, чтобы делать то, что вы хотите! Это называется Array()
. Вопрос, который нужно задать себе: что происходит с классами, которые можно преобразовать в массивы (например, 0..42
)?
Я чувствую, что большинство Rubyist ожидают, что они будут обращены. Итак:
class Thing
attr_accessor :names
def initialize(names)
self.names = names
end
def names=(values)
@names = Array(values)
end
end
Вы получите те же результаты, например:
t = Thing.new("car")
t.names #-> ["car"]
t.names = nil
t.names #-> []
t.names = 42
t.names #-> [42]
t.names = [1, 2, 3]
t.names #-> [1, 2, 3]
t.names = 1..3
t.names #-> [1, 2, 3] # Is this what you want, or not?