Я хотел бы создать класс контейнера для объектов на основе массива Ruby. Я хотел бы манипулировать более чем одним из этих контейнеров, например, конкатенировать 2 вместе. Если я пытаюсь это:Как ссылаться на другой объект того же класса в Ruby?
class Thing
attr_accessor :name
end
class Things
def initialize
@things = Array.new
end
def addone(a)
@things.push(a)
end
def append(list)
list.each { |i| addone(i) }
end
end
item1 = Thing.new
item2 = Thing.new
item3 = Thing.new
item4 = Thing.new
item1.name = "Marty"
item2.name = "Fred"
item3.name = "Janice"
item4.name = "John"
list1 = Things.new
list1.addone(item1)
list1.addone(item2)
list2 = Things.new
list2.addone(item3)
list2.addone(item4)
list3 = Things.new
list3 = list2.append(list1)
Я получаю ошибку:
in
append': undefined method
each' for # (NoMethodError) from ./test.rb:40:in `'
Я пробовал различные подходы, например, создавая каждый метод, как это, кажется, хочет, но не повезло до сих пор. Какие-либо предложения? И спасибо заранее!
Мой ленивый подход: определение функции добавления (* список) 'а затем' list.flatten.each {...} ' – tadman
Если вы не хотите, чтобы иметь возможность хранить массивы массивов :) – mudasobwa
Это лишило бы вещи немного, это правда. Хорошая точка зрения! – tadman