1
我在RubyMotion中使用某個塊並試圖訪問其內部聲明爲外部的實例變量。事實證明,我無法從內部訪問變量。我在這裏有什麼明顯的解決方案嗎?謝謝!塊內訪問變量
下面是代碼
@my_var = true
Dispatch::Queue.concurrent.async do
# can't access @my_var here
end
我在RubyMotion中使用某個塊並試圖訪問其內部聲明爲外部的實例變量。事實證明,我無法從內部訪問變量。我在這裏有什麼明顯的解決方案嗎?謝謝!塊內訪問變量
下面是代碼
@my_var = true
Dispatch::Queue.concurrent.async do
# can't access @my_var here
end
我的猜測是,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
是的,這工作,非常感謝您的解釋!有趣的是,局部變量可以在實例變量不能被訪問的時候被訪問...... – Linus
局部變量總是可以在塊內部訪問。 'instance_eval'只改變塊內的'self'的值。因此,如果'instance_eval'接收器有一個名爲'my_var'的實例方法,我的第一個例子將失敗。 – Max