我在Ruby的作用域方面遇到问题。
我有一个'foobar'方法,里面有两个方法。我希望每个'foobar'方法都可以初始化一个'foobar'可以使用的变量。
以下是我的错误和代码:
未定义的局部变量或方法“ old_var”
def initialize
@sandbox = #working api call
end
def foobar
@sandbox.function() do |resp|
old_var = resp.var.to_f
end
sleep(10)
@sandbox.function() do |resp|
new_var = resp.var.to_f
end
new_var + old_var;
end
答案 0 :(得分:2)
将proc的结果设置为old_var
,以便在使用时在同一作用域中声明它。
old_var =
@sandbox.function() do |resp|
resp.var.to_f
end
与new_var
相同:
new_var =
@sandbox.function() do |resp|
resp.var.to_f
end
如何将在嵌套方法中声明的局部变量设置为父方法的作用域内?
回答标题中的问题:那是不可能的。
如果需要在从嵌套块返回值之前执行一些操作,请使用break
:
value =
@sandbox.function() do |resp|
foo = 42
# do something else
break foo
end
答案 1 :(得分:1)
在块内部定义的变量的作用域为该块。在块外定义变量,然后可以在块内修改变量。这将允许您在块完成之后访问它们。
def initialize
@sandbox = #working api call
end
def foobar
# defining these two variables so you can set them
# inside the block later
old_var = nil
new_var = nil
@sandbox.function() do |resp|
old_var = resp.var.to_f
end
sleep(10)
@sandbox.function() do |resp|
new_var = resp.var.to_f
end
new_var + old_var;
end