2016-04-09 10 views
0

インスタンスメソッドとして設定することなく、ループ内でplayer_1_symbol(およびplayer_2_symbol)にアクセスする方法を教えてください。ループの途中でnew_methodを呼び出して、player_1_symbolを渡す必要があります。インスタンス変数を使用せずにメソッドループ内の変数にアクセスするruby

def select_player_symbol(player_1, player_2) 
    loop do 
     puts "What symbol would you like #{player_1} to be?" 
     player_1_symbol = gets.chomp 

     puts "What symbol would you like #{player_2} to be?" 
     player_2_symbol = gets.chomp 

     if player_2_symbol != player_1_symbol 
     puts "player 1: #{player_1_symbol}" 
     puts "player_2: #{player_2_symbol}" 
     break 
     end 
     puts "Please pick different symbols for each player" 
    end 
    new_method{player_1, 
       player_2, 
       player_1_symbol, 
       player_2_symbol}" # How to access these last two variables 
    end 

これは事前に私のコードでしたが、私はそれをリファクタリングしたかったのです。私は、もっと「正しい」方法が何であるかは分かりません。しかし、ループの外にある変数をインスタンスメソッドとして設定せずにどうやって呼び出す必要があるのか​​、将来を知ることに本当に関心がありました。

def select_player_symbol(player_1, player_2) 
    puts "What symbol would you like #{player_1} to be?" 
    player_1_symbol = gets.chomp 

    puts "What symbol would you like #{player_2} to be?" 
    player_2_symbol = gets.chomp 

    while player_2_symbol == player_1_symbol 
     puts "#{player_1} has already picked that symbol," 
     puts "please pick another symbol." 
     player_2_symbol = gets.chomp 
    end 
    new_method{player_1, 
       player_2, 
       player_1_symbol, 
       player_2_symbol} 
    end 

答えて

2

は次のようにループに入る前に設定します。

def select_player_symbol(player_1, player_2) 
    player_1_symbol = nil 
    player_2_symbol = nil 
    loop do 
     ... 

を示唆してplayer_1_symbolはメソッドレベルでスコープされ変化するため、これは動作します。スコープがループ内に入る前。ループを離れたときにあなたはそれを失った。

+0

正しいそれを試してみて、おそらくOPはこの作品理由として説明の恩恵を受けるだろう。 –

+0

さんがコメントを追加しました – Mircea

-2

メソッド外に定義します。 明らかHERE

$player_1_symbol = nil 
$player_2_symbol = nil 


def select_player_symbol(player_1, player_2) 
    loop do 
     puts "What symbol would you like #{player_1} to be?" 
     $player_1_symbol = gets.chomp 

     puts "What symbol would you like #{player_2} to be?" 
     $player_2_symbol = gets.chomp 

     if $player_2_symbol != $player_1_symbol 
     puts "player 1: #{$player_1_symbol}" 
     puts "player 2: #{$player_2_symbol}" 
     break 
     end 
     puts "Please pick different symbols for each player" 
    end 
end 

def another_method() 
    puts "Gloabals are still here #{$player_1_symbol} and #{$player_2_symbol}" 

end 

#lets try it 
select_player_symbol("Joe","Adam") 
another_method() 
関連する問題