ruby组合 - 如何显示组合类的成员?

时间:2013-03-17 15:32:52

标签: ruby composition

从我习惯的rails来到rails框架管理我的关系。

现在尝试做基本的Ruby。

试图了解关系和构成。 以包装卡为例。 现在只使用1到52的card_number(暂时忽略套装和实数)。

下面的代码可以创建PackOfCards,但是没有创建我想要的5张牌,或者没有显示任何内容,或者我最后得到的是nil。

class PackOfCards

  attr_accessor :pack_name, :cards

  def initialize(pack_name)

    @pack_name= pack_name
    cards = []
    5.times do
      cards << PlayingCard.new(self)
    end 
  end 

end

class PlayingCard

  attr_accessor :pack, :card_number

  def initialize(pack)
    @card_number = rand(52)
    @pack = pack
  end 

end

my_pack=PackOfCards.new('bobs')
puts my_pack.pack_name
puts my_pack.cards # Nothing
my_pack.cards.each do |one_card|
  puts one_card.card_number # Undefined method 'each' for nil
end

我如何创建一副卡片,并在我这样做时有5张卡片?如何显示这5张卡片?

2 个答案:

答案 0 :(得分:1)

我认为访问者只为您创建cardscards=方法。我不认为<<应该有效。尝试更改为:

@cards = []
5.times do
  @cards << PlayingCard.new(self)
end 

答案 1 :(得分:0)

问题实际上在于您创建的非预期局部变量。

如果你说:

x =卡

它将与:

相同

x = self.cards

然而,如果没有自我分配,你实际上创建了一个局部变量'cards'

self.cards = []

卡&lt;&lt; FOO

工作正常,因为使用方法将根据ruby首先查看self,但由于ruby中的局部变量看起来与方法调用相同,因此ruby可以在分配时创建它们。