为什么这些甚至存在?这似乎很荒谬。与大多数动态语言一样,AppleScript 类型似乎要么是不可变的原始类型,如integers 和reals,它们将按值传递并且与 一起使用没有任何意义a reference to,要么是类对象类型,如applications、scripts 或records,它们已经通过引用传递。怎么a reference to不完全冗余?这是取自 Apple 的 AppleScript 语言指南的示例(如果您丢失了链接,请参见http://developer.apple.com/library/mac/#documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html ):
tell app "Finder" to set diskRef to a ref to startup disk
--result: startup disk of application "Finder"
所以你的意思是告诉我,如果我这样做,
tell app "Finder" to set diskObj to startup disk
--result: startup disk of application "Finder"
applescript 运行时将发送一个发送到 Finder 进程的苹果事件,告诉它,“嘿 - 有人刚刚要求你将 /dev/disks01 的八位字节流返回给我!哈哈!我想他应该问为a reference to它!让我们开始吧!这需要一段时间!”
我正在用 Python 编程,我这样做:
m = fileHandle.read( 1000000000 ) #and then wait a little while
n = m
我只是在内存中复制了一些数据吗?当然不是。但是a reference toAppleScript 中的存在意味着将对象分配给新变量是按值操作。如果是这种情况,那么命令的处理是copy什么?
这里发生了什么?
更新:好吧,就当我是一个困惑的 Python 程序员吧。只是为了更清楚一点,我仍然认为
tell app "Finder" to set diskRef to a ref to startup disk
--result: startup disk of application "Finder"
是一个糟糕的例子(取自applescript语言指南)。但是@Chuck 的a reference to属性本身包含一个可以重新分配的原始类型的示例是一个更好的示例。IOW,reference对象实际上是一个变量/属性,它包含指向另一个变量或属性的指针。