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

标签 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?

最佳答案

因为“引用”与对象说明符是同一件事,所以就 AppleScript 而言,您不能引用非对象(或包含在非对象中)的对象.

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

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

关于reference - 为什么在 AppleScript 中,不能声明对处理程序本地变量的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15777321/

相关文章:

macos - 如何在 JavaScript for Automation 中获取当前脚本文件夹的 POSIX 路径?

c++ - 防止通过引用传递右值

c++ - 在重新定义变量之前从外部作用域访问变量是否定义良好?

macos - 将 Cocoa 与 AppleScript 结合使用

Objective-C/CGI 我唯一的选择?

c++ - 在 C++ 中隐藏 int 变量的名称

c# - 从委托(delegate)构造委托(delegate)。新的委托(delegate)指向什么?

Java:等于和==

c++ - 如何在C++中返回类的引用

c++ - 将对象引用传递给重载器