为什么在AppleScript中,您不能声明对处理程序本地变量的引用?

时间:2013-04-03 01:24:33

标签: reference scope applescript handler

为什么不能声明和使用对变量的引用,除非引用的变量是全局范围的?请解释导致以下现象的运行时内存或对象结构:

脚本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?

1 个答案:

答案 0 :(得分:4)

因为“引用”与对象说明符是相同的,所以就AppleScript而言,你不能引用那些不是(或者不包含在某个东西)对象的东西。

全局变量由顶级脚本对象拥有 - 它实际上是一个没有初始化器的属性。 (您也可以引用脚本属性;它不必是严格全局的。)

另一方面,局部变量由它所在的处理程序的调用框架所拥有,而调用框架不是AppleScript中的对象,因此没有引用。