2016-05-23 7 views
-1
class Player 

    attr_accessor :card_pile 
    def initialize 
    @bust = false 
    @card_pile = [] 
    end 

    def bust? 
    return @cards.inject(:+) > 21 
    end 

end 

私はこのプレイヤーのクラスを持っていると私は以下のwhileループでは、この変数を使用したい変数別のRubyクラスのインスタンス変数にアクセスするには?

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 

card_pile initazliedています。なぜこれが私が望む方法でアクセスできないのですか? `` playing_game ':

エラーメッセージがあるプライベートメソッドinitialize' called for #<Player:0x007fda53073f48 @bust=false, @card_pile=[]> (NoMethodError)

+0

:あなたがこれを行うことができますので、あなたは現在、任意の引数があなたのinitializeメソッドに渡されている必要はありませんが、attr_accessorcard_pile変数インスタンスを設定しています? – hellogoodbye

+1

'attr_accessor:@ card_pile'ではなく' attr_accessor:card_pile' –

+1

あなたの質問は不明です。タイトルとテキストでインスタンス変数について質問しますが、エラーメッセージは完全に無関係なプライベートメソッドを呼び出すことです。では、プライベートメソッドやインスタンス変数を呼び出すことについて何を求めていますか?次に、コメント内でアクセサメソッドについて質問します。この場合も、エラーメッセージとは無関係です。 –

答えて

1

initializeあなたがPlayer.newを使用して、クラスの新しいインスタンスを作成するときに自動的に呼び出されます。 @ card_pile`:私はattr_accessor `設定することはできませんなぜ

player = Player.new 
while player.card_pile.length < 2 do 
    new_card = Card.new 
    player.card_pile.push(new_card.value) 
end 
+0

の「クラス、オブジェクト、および変数」を参照してください。これはできないのですか?なぜ私はattr_accessorを設定できないのですか?@ card_pile? – hellogoodbye

+0

クラスはインスタンス変数をカプセル化していますが、それはそれらが提供する組織的な利点の1つです。 @記号は、定義されているクラス内のインスタンス変数にアクセスするためだけに使用されます。 – Shaun

関連する問題