鉴于下面的测试代码,我们需要创建一个类和方法来使测试代码工作。到目前为止,我已经获得了测试代码,直到def kids和def family方法。当我在irb中运行代码时,我目前得到家庭方法的反馈--Bobby有两个孩子:Bobby ,.这显然不是它应该是什么,应该是Tim和Sam被列为Bobby的孩子。我是否需要创建一个数组并将其放在initialize方法中?
class Person
attr_accessor :age
def initialize(name, age)
@name = name
@age = age
end
def birthday
@age += 1
end
def kids
kids = []
kids << @name
end
def family
puts "Bobby has 2 children: #{kids[0]}, #{kids[1]}"
end
end
bobby = Person.new("Bobby", 28)
bobby.age #=> 28
bobby.birthday
bobby.birthday
bobby.age #=> 30
tim = Person.new("Tim", 1)
sam = Person.new("Sam", 1)
bobby.kids << tim
bobby.kids << sam
bobby.family
#=> "Bobby has 2 children:
# => Tim,
# => Sam"
答案 0 :(得分:1)
每次你打电话给孩子时,你都会覆盖孩子阵列并用一个元素返回它。所以要修复添加
@kids = []
到初始化
并添加add_kid方法
def add_kid kid
kids << kid
end
让当前的孩子只是一个吸气剂
def kids
kids
end
最后将家庭改为
def family
puts "Bobby has 2 children: #{kids[0].name}, #{kids[1].name}"
end
通过添加单独的getter和setter来修复它,而不是尝试使用试图同时执行这两项操作的old kids方法