为什么不能声明和使用变量的引用,除非引用的变量是全局范围的?请解释一下导致以下现象的运行时内存或对象结构:
脚本 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?
最佳答案
因为“引用”与对象说明符是同一件事,所以就 AppleScript 而言,您不能引用非对象(或包含在非对象中)的对象.
全局变量由顶级脚本对象拥有——它实际上是一个没有初始化器的属性。 (您还可以引用脚本属性;它不必是严格的全局属性。)
另一方面,局部变量由其所在处理程序的调用框架拥有,并且调用框架不是 AppleScript 中的对象,因此没有引用。
关于reference - 为什么在 AppleScript 中,不能声明对处理程序本地变量的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15777321/