Почему они вообще существуют? Это кажется абсурдным. Как и в большинстве динамических языков, типы AppleScript кажутся либо неизменяемыми примитивными типами, такими как integer
s и real
s, которые будут передаваться по значению и не имеют никакого смысла для использования с a reference to
, либо объектными типами, такими как application
s, script
s, или record
s, которые уже передаются по ссылке. Как 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 отправит событие apple, отправленное процессу Finder, сообщая ему: «Эй, какой-то парень только что попросил вас вернуть мне поток октетов /dev/disks01! Ха-ха! Я думаю, он должен был спросить за a reference to
это! Давайте начнем! Это займет некоторое время!"
Я программирую на Python, и я делаю это:
m = fileHandle.read( 1000000000 ) #and then wait a little while
n = m
Я только что скопировал гиг данных в память? Конечно, нет. Но существование a reference to
в AppleScript подразумевает, что присваивание объектов новым переменным является операцией по значению. И если это так, что делать с командой 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
на самом деле является переменной/свойством, которое содержит указатель на другую переменную или свойство.