2013-03-17 63 views
0

从我使用rails框架来管理我的关系的来源。红宝石组成 - 如何显示组成类的成员?

现在试图只做基本的Ruby。

试图了解关系和组成。 使用一副牌作为例子。 现在只需使用1到52的卡号(现在忽略套装和实际数字)。

下面的代码可以创建PackOfCards,但不会创建我想要的5张卡片,无论是什么都不显示,或者我在最后得到零的零。

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张牌?

回答

1

我认为accessor只为你创建了cardscards=方法。我不认为<<应该工作。尝试更改为:

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

是的,工作,谢谢! – junky 2013-03-17 15:45:43

0

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

如果你说:

X =卡

这将是一样:

X = self.cards

但是没有对转让自身实际创建一个局部变量'cards'

selfcards = []

卡< <富

将正常工作,如使用方法将按照红宝石查找自我第一,但在红宝石局部变量看起来是一样的方法调用,红宝石可分配时创建它们。