2014-03-24 125 views
1

我在RubyMotion中使用某個塊並試圖訪問其內部聲明爲外部的實例變量。事實證明,我無法從內部訪問變量。我在這裏有什麼明顯的解決方案嗎?謝謝!塊內訪問變量

下面是代碼

@my_var = true 

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

回答

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 
+0

是的,這工作,非常感謝您的解釋!有趣的是,局部變量可以在實例變量不能被訪問的時候被訪問...... – Linus

+2

局部變量總是可以在塊內部訪問。 'instance_eval'只改變塊內的'self'的值。因此,如果'instance_eval'接收器有一個名爲'my_var'的實例方法,我的第一個例子將失敗。 – Max