2014-03-24 3 views
1

RubyMotion에서 특정 블록을 사용하고 있으며 외부에서 선언 된 인스턴스 변수에 액세스하려고합니다. 내부에서 변수에 액세스 할 수 없습니다. 여기에 분명한 해결책이 있습니까? 감사!블록 내 변수 액세스

여기에 코드를입니다

@my_var = true 

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

답변

4

내 생각은 asyncinstance_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