这应该是一个简单的问题,我想我只是因为长时间盯着我的代码而放弃了大脑屁。
jsonlasttengamesopp["games"].each do |opp|
if opp["gameId"] == x["gameId"]
opponentkills = opp["stats"]["championsKilled"]
opponentassists = opp["stats"]["assists"]
opponentdeaths = opp["stats"]["numDeaths"]
binding.pry #Binding.pry number 1
break
end
end
binding.pry #Binding.pry number 2
第一个binding.pry给了我正确的对手技能,助攻和死亡......
当我打电话给opponentkills时,第二个binding.pry给了我这个错误:
NameError: undefined local variable or method `opponentkills' for #<Class:0x007f46b0cab428>
我应该可以在这个循环之外调用对手技能。不应该吗?
答案 0 :(得分:2)
每个块都创建自己的绑定,这意味着在块中创建的变量不能在此块之外访问。但是,每个块还带有它创建的绑定,因此它可以访问外部变量。所以,如果你这样做:
opponentkills = nil
jsonlasttengamesopp["games"].each do |opp|
if opp["gameId"] == x["gameId"]
opponentkills = opp["stats"]["championsKilled"]
opponentassists = opp["stats"]["assists"]
opponentdeaths = opp["stats"]["numDeaths"]
binding.pry #Binding.pry number 1
break
end
end
binding.pry #Binding.pry number 2
块不会在其绑定中创建新的局部变量,但会使用外部绑定中的变量。