我如何创建一个 to_s,其中一个实例变量指向另一个 class 的对象数组?
How can I create a to_s with an instance variable pointing to an array of objects from another class?
使用下面的代码,我想创建一个 to_s
方法来打印出这样的信息:
Southside 有 3 名队员。
这些成员是:Dario,现年 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>
我发现困难的部分是访问团队成员数组中的 Person class 对象的实例变量。
这是两个 classes:
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
为 Person
class 定义 to_s
("#{@name}, who is #{@age} years old"
)。然后你可以做 @members.map{ |m| m.to_s}.join('. ')
首先,您不想在 to_s
方法中使用 puts
。而只是 return 字符串。其次,变量 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
使用下面的代码,我想创建一个 to_s
方法来打印出这样的信息:
Southside 有 3 名队员。 这些成员是:Dario,现年 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>
我发现困难的部分是访问团队成员数组中的 Person class 对象的实例变量。
这是两个 classes:
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
为 Person
class 定义 to_s
("#{@name}, who is #{@age} years old"
)。然后你可以做 @members.map{ |m| m.to_s}.join('. ')
首先,您不想在 to_s
方法中使用 puts
。而只是 return 字符串。其次,变量 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