Передача по ссылке в 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
Контринтуитивно и неясно какую пользу это приносит, но вот так сделано.
9 октября 2017 20:59

Denis Ibaev (инкогнито)
10 октября 2017, 09:12

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

bolknote.ru (bolknote.ru)
10 октября 2017, 13:01, ответ предназначен Denis Ibaev

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

Baka (инкогнито)
10 декабря 2017, 07:42

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

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)