如何访问另一个Ruby类中的实例变量?
我有这个玩家类,并且有一个初始化的card_pile变量如何访问另一个Ruby类中的实例变量?,ruby,instance,instance-variables,Ruby,Instance,Instance Variables,我有这个玩家类,并且有一个初始化的card_pile变量 class Player attr_accessor :card_pile def initialize @bust = false @card_pile = [] end def bust? return @cards.inject(:+) > 21 end end 类游戏 def初始化 @玩家=[] 结束 def正在玩游戏 输入“有多少玩家在玩?” 玩家数量=gets.chom
class Player
attr_accessor :card_pile
def initialize
@bust = false
@card_pile = []
end
def bust?
return @cards.inject(:+) > 21
end
end
类游戏
def初始化
@玩家=[]
结束
def正在玩游戏
输入“有多少玩家在玩?”
玩家数量=gets.chomp.to
(0…玩家数量)。每人
puts(“玩家的名字是什么?”)
name=gets.chomp
@玩家。推(名字)
结束
放置@players
player=player.new
player.initialize
而@card_pile.length<2 do
新卡=新卡
@卡堆推送(新卡值)
结束
结束
我希望在下面的while循环中使用这个变量。为什么不能以我希望的方式访问它
错误消息是:`playing_game':为#(NoMethodError)
调用私有方法initialize
,当您使用Player.new
创建类的新实例时,将自动调用该方法。您当前没有任何参数被传递到initialize方法,但是您已经使用attr\u accessor
设置了实例变量card\u pile
,因此您可以执行以下操作:
class Game
def initialize
@players = []
end
def playing_game
puts "How many players are playing? "
players_amount = gets.chomp.to_i
(0...players_amount).each do
puts ("What is the players name? ")
name = gets.chomp
@players.push(name)
end
puts @players
player = Player.new
player.initialize
while @card_pile.length < 2 do
new_card = Card.new
@card_pile.push(new_card.value)
end
end
player=player.new
而player.card_pile.length<2 do
新卡=新卡
玩家.牌堆.推(新牌.值)
结束
为什么我不能设置attr\u访问者:@card\u pile
?不是attr\u访问者:@card\u pile
而是attr\u访问者:card\u pile
您的问题不清楚。在标题和文本中,您询问了有关实例变量的问题,但错误消息是关于调用私有方法的,这是完全不相关的。那么,您在问什么:调用私有方法或实例变量?然后,在注释中,询问访问器方法。同样,与错误消息无关。请参阅ok cheers中的“类、对象和变量”。这不可能吗?为什么我不能设置attr_访问器:@card_pile?类封装了它们的实例变量,这是它们提供的组织优势之一。@符号仅用于访问它们所定义的类中的实例变量。
player = Player.new
while player.card_pile.length < 2 do
new_card = Card.new
player.card_pile.push(new_card.value)
end