Передача по ссылке в AppleScript’е

ЭплСкрипт, конечно, очень странный язык. С одной стороны, ребята явно старались сделать программирование похожим на написание текста на естественном (английском) языке, с другой стороны, все кишочки спрятать не удалось. Любимые мои грабли — это передача значений по ссылке.

У этой штуки есть одна особенность, которую надо знать. Код ниже перебирает список и выводит в консоль всякую информацию об единственном элементе, который в списке содержится:

repeat with itm in {false}
    log itm -- Выведет «false»
    log class of itm -- Выведет «boolean»
    log itm is false -- Выведет… «false», хм
    log itm is true -- И снова «false»
end repeat

Непонятно, да? Элемент булевского типа, но не «истина» и не «ложь», как так? Дело в том, что этот элемент — ссылка. И прежде чем его с чем-то сравнивать, надо получить его значение. Вот так нормально:

repeat with itm in {false}
    log contents of itm is false -- Выведет «true»
end repeat

Контринтуитивно и неясно какую пользу это приносит, но вот так сделано.

Поделиться
Отправить
3 комментария
Denis Ibaev

Это можно использовать для изменения элементов массива в цикле. В Perl сделано похоже, но там сравнения будут работать.

Евгений Степанищев (bolknote.ru)

Комментарий для Denis Ibaev:

Я не про ссылку (ссылки там полезны, конечно, пока я Тетрис писал, их неявно использовал), а про то, что ссылка — это специальный объект, который не равняется по значению тому, на что он ссылается. Это слишком похоже на Си и неясно с какой целью так сделано.

Baka

AppleScript -​-​ это Кобол, «повторённый как фарс»? (Или уже как американский фильм?)
(Из «История повторяется* дважды: первый раз в виде трагедии, второй — в виде фарса.
И третий -​-​ как американский фильм».)
*Ясно, что в первый раз она ещё не повторяется.

Популярное