Требуется ли восстановление разделителей текстовых элементов?

Обычно рекомендуется использовать разделители текстовых элементов следующим образом:

set tid to AppleScript's text item delimiters
set AppleScript's text item delimiters to "x"
set l to text items of "aaxbb"
set AppleScript's text item delimiters to tid
l

Я обычно делаю что-то вроде этого, хотя:

set text item delimiters to "x"
text items of "aaxbb"

http://macscripter.net/viewtopic.php?id=24725:

Важно обратить внимание на сообщение: "ВСЕГДА УСТАНАВЛИВАЙТЕ ИХ НАЗАД". AppleScript запоминает настройки разделителей. Даже если вы откроете новый второй скрипт в Редакторе скриптов, разделители, которые вы установили в первом, будут применены ко второму.

Я не был в состоянии воспроизвести это все же. Изменилось ли поведение в какой-либо версии OS X?

AppleScript: полное руководство:

Значение разделителей текстовых элементов сохраняется до тех пор, пока работает этот экземпляр компонента сценариев AppleScript. Поскольку в этом компоненте сценариев может выполняться несколько сценариев, любой из которых может устанавливать разделители текстовых элементов, имеет смысл не делать никаких предположений относительно значения разделителей текстовых элементов.

Это все еще так, или вы можете привести примеры, когда свойство разделителя текстовых элементов влияет на другие сценарии?

5 ответов

Я нашел этот кусок на https://developer.apple.com/library/mac/#documentation/applescript/conceptual/applescriptlangguide/conceptual/ASLR_fundamentals.html в разделе Основы AppleScript > Глобальные константы в AppleScript > разделители текстовых элементов:


Если вы измените свойство разделителей текстовых элементов в Редакторе сценариев, оно будет изменяться до тех пор, пока вы не восстановите его предыдущее значение или не выйдете из Редактора сценариев и не запустите его снова. Если вы изменяете разделители текстовых элементов в приложении-скрипте, они остаются в этом приложении до тех пор, пока вы не восстановите его предыдущее значение или пока приложение-скрипт не закроется; однако разделители не изменяются ни в редакторе сценариев, ни в других приложениях сценариев, которые вы запускаете.


Я помню, что читал что-то об этом изменении, о котором вы говорите, что больше не было необходимости сбрасывать их, однако я не смог ничего найти об этом после поиска в Google. Таким образом, я сделал быстрый тест. Я сделал эти 2 сценария и запустил их в редакторе AppleScript. Сначала этот...

set text item delimiters to "something"
return text item delimiters

А потом этот...

return text item delimiters

Второй скрипт возвращает {""}. Таким образом, кажется, что первый скрипт не влияет на второй. Я проверил это в 10.6 и 10.8 с одинаковыми результатами.

Вот заметки о выпуске AppleScript. Я не могу найти заметки о выпуске для 10.7 или 10.8. Их поиск тоже ничего не дает по этому вопросу...

http://developer.apple.com/library/mac/#releasenotes/AppleScript/RN-AppleScript/RN-10_3/RN-10_3.html#//apple_ref/doc/uid/TP40000982-CH103-SW1

Поэтому у меня нет окончательного ответа для вас. Все говорят, чтобы сбросить их, но мой простой тест показывает, что это не требуется.

Кроме того, вы правы, вам не нужно "Applescript's" за пределами блоков рассказать.

Дело не в том, влияет ли изменение разделителей текстовых элементов AppleScript на другие сценарии или нет, а в том, что это изменение влияет на весь сценарий , в котором вы это делаете.

В большом скрипте с большим количеством обработчиков очень сложно за этим следить и легко забыть, что это изменение все еще действует, и это может привести к тому, что вам придется тратить много времени и кропотливо искать, где находится закралась скрытая ошибка .

Поэтому мой ответ на вопрос (для тех, кто хочет писать простые в отладке скрипты и библиотеки скриптов) такой: — на всякий случай всегда восстанавливайте исходные разделители текстовых элементов AppleScript , так как это глобальное свойство.

Если вы запускаете приложение-скрипт, то, я думаю, технически нет необходимости перезагружать их, потому что, как только оно вышло, оно вышло!

Но если вы запускаете скрипт в редакторе скриптов, то изменения в разделителях останутся в этом скрипте в редакторе скриптов. Я только что видел это сегодня.

Но то, что изменилось несколько лет назад, это то, что это НЕ влияет на другие скрипты / окна, открытые в Редакторе скриптов.

Кроме того, при запуске в качестве приложения это влияет только на этот конкретный сценарий.

Вот пример проблемы с разделителем текстового элемента, если вы не сбрасываете TID в случае ошибки.

Каждый раз, когда вы запускаете этот сценарий, значение A меняется, как и значение разделителей текстовых элементов.

При перекомпиляции TID восстанавливается по умолчанию.

Applescript-код

      try
    log "A initial: " & A
    set Aincr to Aincr + 1
on error
    log "A initial does not exist"
    set Aincr to 0
end try
log "Initial Text Item Delimiters: \"" & (get text item delimiters) & "\""

set A to 3 + Aincr
log "Aincr: " & Aincr
log "A final: " & A

try
    set text item delimiters to (get A as text)
    1 / 0 -- create an error so that the TID are never reset
    set text item delimiters to ""
end try
log "Final Text Item Delimiters: \"" & (get text item delimiters) & "\""
Другие вопросы по тегам