在块内访问变量

时间:2014-03-24 16:38:43

标签: ruby block rubymotion

我在RubyMotion中使用某个块并尝试访问其中声明为外部的实例变量。事实证明我无法从内部访问变量。我有什么明显的解决方案吗?谢谢!

这是代码

@my_var = true

Dispatch::Queue.concurrent.async do
  # can't access @my_var here
end

1 个答案:

答案 0 :(得分:4)

我的猜测是async使用instance_eval运行块,因此在块内使用时,您的实例变量会绑定到其他对象。如果您只需要读取变量,只需在块中使用本地副本

@my_var = true
my_var = @my_var
Dispatch::Queue.concurrent.async do
  my_var
end

或者如果你有一个存取方法

@my_var = true
this = self
Dispatch::Queue.concurrent.async do
  this.my_var
end