Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何访问另一个Ruby类中的实例变量?_Ruby_Instance_Instance Variables - Fatal编程技术网

如何访问另一个Ruby类中的实例变量?

如何访问另一个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

我有这个玩家类,并且有一个初始化的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.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