从我习惯的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张卡片?
答案 0 :(得分:1)
我认为访问者只为您创建cards
和cards=
方法。我不认为<<
应该有效。尝试更改为:
@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可以在分配时创建它们。