基本的ruby类查询 - 我是否需要添加一个空数组来初始化?

时间:2014-08-05 20:07:24

标签: ruby

鉴于下面的测试代码,我们需要创建一个类和方法来使测试代码工作。到目前为止,我已经获得了测试代码,直到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"

1 个答案:

答案 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方法