如何使用指向另一个类中的对象数组的实例变量创建to_s?

时间:2016-11-01 18:13:59

标签: ruby oop instance-variables puts

使用下面的代码,我想创建一个to_s方法,打印出如下信息:

Southside有3名团队成员。 这些成员是:达里奥,22岁。特德,今年21岁。鲍勃,44岁。

目前,我得到了这个:

Southside有3名团队成员。 这些成员是:

[#<Person:0x000000025cd6e8 @name="Dario", @age=22>, #<Person:0x000000025cd670 @name="Ted", @age=21>, #<Person:0x000000025cd620 @name="Bob", @age=44>].
#<Team:0x000000025cd7d8>

我发现困难的部分是访问Team成员数组中Person类对象的实例变量。

以下是两个类:

class Team
  attr_accessor :name, :members

  def initialize(name)
    @name = name
    @members = []
  end

  def <<(person)
    members.push person
  end

  def to_s
    puts "#{@name} has #{@members.size} team members."
    puts "Those members are: #{@members}."
  end
end

class Person
  attr_accessor :name, :age

  def initialize(name, age)
    @name = name
    @age = age
  end
end

south_side_bowlers = Team.new("Southside")

south_side_bowlers << Person.new("Dario", 22)
south_side_bowlers << Person.new("Ted", 21)
south_side_bowlers << Person.new("Bob", 44)

puts south_side_bowlers

2 个答案:

答案 0 :(得分:2)

to_s课程定义"#{@name}, who is #{@age} years old"Person)。然后你可以@members.map{ |m| m.to_s}.join('. ')

答案 1 :(得分:1)

首先,您不希望在puts方法中使用to_s。而只是返回字符串。其次,变量members实际上可能不是您想要在方法中输出的。试试这个

def to_s
  %Q(#{@name} has #{@members.size} team members. Those members are #{@members.map{|i| "#{i.name} who is #{i.age}"}.join(', ')})
end