2014-12-17 7 views
0

Я ищу распечатку имени и переменных статуса для каждого экземпляра класса FamilyMember. Я создал экземпляры и добавил их в массив. Когда я пытаюсь выполнить цикл через массив с использованием метода .each, имя и переменные статуса не возвращаются. Любая помощь будет принята с благодарностью.Как распечатать значения переменных экземпляра для каждого экземпляра класса?

class FamilyMember 
    attr_reader :name, :age, :sex, :status, :country 



    def initialize (name, age, sex, status, country) 
    @name = name 
    @age = age 
    @sex = sex 
    @status = status 
    @country = country 

    end 

    def parent? 

    end 

    def child? 

    end 
end 

Экземпляры класса

fm1 = FamilyMember.new('Scott', 18 , 'Male', 'Employed', 'America'), 
fm2 = FamilyMember.new('Stephen', 30, 'Male', 'Employed', 'Ireland'), 
fm3 = FamilyMember.new('Gillian', 50, 'Female', 'Employed', 'Ireland'), 
fm4 = FamilyMember.new('Rolf', 56, 'Male', 'Employed', 'Ireland'), 
fm5 = FamilyMember.new('Shane', 14, 'Male', 'Unemployed', 'Ireland') 

Создание массива

array_1 = Array.new 

Добавление элементов в массив

array_1 << fm1 
array_1 << fm2 
array_1 << fm3 
array_1 << fm4 
array_1 << fm5 


array_1.each do |p| #Trying to print out the name and status values for each instance. 
    puts "#{p.name} is #{p.status}" 
end 

ответ

3

Ваша проблема заключается в том, что вы закончили каждую строку создания экземпляра в ваш код w с ,. Вот почему fm1 фактически создается как массив вместо FamilyMember

fm1.class 
# => Array 

просто удалить , в конце строки:

fm1 = FamilyMember.new('Scott', 18 , 'Male', 'Employed', 'America') 
fm2 = FamilyMember.new('Stephen', 30, 'Male', 'Employed', 'Ireland') 
fm3 = FamilyMember.new('Gillian', 50, 'Female', 'Employed', 'Ireland') 
fm4 = FamilyMember.new('Rolf', 56, 'Male', 'Employed', 'Ireland') 
fm5 = FamilyMember.new('Shane', 14, 'Male', 'Unemployed', 'Ireland') 

и попробуйте еще раз:

array_1 = Array.new 
array_1 << fm1 
array_1 << fm2 
array_1 << fm3 
array_1 << fm4 
array_1 << fm5 


array_1.each do |p| 
    puts "#{p.name} is #{p.status}" 
end 

Выход:

Scott is Employed 
Stephen is Employed 
Gillian is Employed 
Rolf is Employed 
Shane is Unemployed 
+0

Спасибо, миллион. Я пытался создать такой массив ... array_1 = [fm1 = Familymember.new ('Scott', 18, 'Male', 'Employed', 'America'), fm2 = Familymember.new ('Stephen' , 18, 'Male', 'Employed', 'Ireland') и т. Д. И т. Д.] Я, должно быть, оставил. – Steve

Смежные вопросы