为什么不能声明和使用对变量的引用,除非引用的变量是全局范围的?请解释导致以下现象的运行时内存或对象结构:
脚本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 :(得分:4)
因为“引用”与对象说明符是相同的,所以就AppleScript而言,你不能引用那些不是(或者不包含在某个东西)对象的东西。
全局变量由顶级脚本对象拥有 - 它实际上是一个没有初始化器的属性。 (您也可以引用脚本属性;它不必是严格全局的。)
另一方面,局部变量由它所在的处理程序的调用框架所拥有,而调用框架不是AppleScript中的对象,因此没有引用。