在不使用实例变量ruby的情况下访问方法循环内部的变量
如何访问循环中的player_1_符号(和player_2_符号),而不将其设置为实例方法。我正在尝试循环任何错误的输入,一旦它退出循环,我将调用一个新的\u方法,并需要传递播放器\u 1 \u符号在不使用实例变量ruby的情况下访问方法循环内部的变量,ruby,Ruby,如何访问循环中的player_1_符号(和player_2_符号),而不将其设置为实例方法。我正在尝试循环任何错误的输入,一旦它退出循环,我将调用一个新的\u方法,并需要传递播放器\u 1 \u符号 def select_player_symbol(player_1, player_2) loop do puts "What symbol would you like #{player_1} to be?" player_1_symbol = gets.cho
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
在进入循环之前进行设置,如下所示:
def select_player_symbol(player_1, player_2)
player_1_symbol = nil
player_2_symbol = nil
loop do
...
这是因为在建议的更改中,player_1_符号的作用域是在方法级别。在其作用域位于循环内部之前。当你离开环路时,你失去了它 在方法之外定义它们。 试试看
显然是正确的,但也许OP会从解释为什么这样做中受益。补充评论以澄清
$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()