局部可变轨道

时间:2014-09-17 14:35:38

标签: ruby-on-rails ruby

这应该是一个简单的问题,我想我只是因为长时间盯着我的代码而放弃了大脑屁。

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>

我应该可以在这个循环之外调用对手技能。不应该吗?

1 个答案:

答案 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

块不会在其绑定中创建新的局部变量,但会使用外部绑定中的变量。