0

来自我习惯于为我管理关系的 Rails 框架的 Rails。

现在尝试只做基本的 Ruby。

试图理解关系和组成。以卡片包为例。现在只使用 1 到 52 的 card_number(暂时忽略花色和实数)。

下面的代码可以创建 PackOfCards,但没有创建我想要的 5 张卡片,要么什么都没有显示,要么我最后得到的 put 为零。

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 张卡片?

4

2 回答 2

1

我认为访问器只会为您创建cardsandcards=方法。我认为这<<不应该奏效。尝试更改为:

@cards = []
5.times do
  @cards << PlayingCard.new(self)
end 
于 2013-03-17T15:43:57.353 回答
0

问题实际上在于您创建的意外局部变量。

如果你说:

x = 卡片

这将与以下内容相同:

x = self.cards

但是,如果没有 self 赋值,您实际上会创建一个局部变量“cards”

self.cards = []

卡片 << foo

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

于 2013-03-17T16:52:55.773 回答