2013-04-03 2 views
2

참조 된 변수가 전역 적으로 범위를 벗어나지 않는 한 왜 변수에 대한 참조를 선언하고 사용할 수 없습니까?AppleScript에서 핸들러에 대한 변수 참조를 선언 할 수없는 이유는 무엇입니까?

스크립트 A가 실패 :

on foo()   
    set l to {0} 
    set lref to a reference to l 
    return item 1 of lref 
end foo 

foo() 

스크립트 B는 성공 :

on run 
    set l to {0} 
    set lref to a reference to l 
    return item 1 of lref 
end run 

스크립트 C는 성공 :

on foo()   
    global l 
    set l to {0} 
    set lref to a reference to l 
    return item 1 of lref 
end foo 

foo() 
다음과 같은 현상에 이르게 런타임 메모리 또는 객체 구조를 설명해주십시오

참조 : How do you efficiently build a list within a handler in AppleScript?Why Can't AppleScript make firstValue of hash into type reference in this test code?

+0

[Applescript 개체가 정의되기 전에 어떻게 참조 할 수 있습니까?]라는 질문에 대한 근본적인 질문이 있습니다. (http://stackoverflow.com/questions/26973089/how-can-applescript-objects-be-referenced-before- they-are-defined/27237170 # 27237170) –

답변

4

"참조"는 객체 지정자와 동일하므로 AppleScript가 아닌 객체 (예 : 객체가 아닌 객체에 포함되어있는 객체)에 대한 참조를 만들 수 없습니다. 걱정.

전역 변수는 최상위 스크립트 객체가 소유합니다.이 변수는 실제로는 초기화 도구가없는 속성입니다. (스크립트 속성에 대한 참조를 가질 수도 있지만 전역적일 필요는 없습니다.)

반면 로컬 변수는 자신이 속한 핸들러의 호출 프레임이 소유합니다. 호출 프레임은 AppleScript의 객체가 아니므로 참조가 없습니다.

+0

그리고 지정할 수있는 객체를 만드는 유일한 방법은 스크립트 초기화입니다. 맞습니까? – 108

관련 문제