2

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

脚本 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()

另请参阅:如何在 AppleScript 的处理程序中有效地构建列表?以及为什么 AppleScript 不能在此测试代码中将散列的 firstValue 转换为类型引用?

4

1 回答 1

4

因为“引用”与对象说明符是一样的东西,所以就AppleScript 而言,您不能引用不是(或包含在不是)对象的对象。

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

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

于 2013-04-04T20:09:53.950 回答