Ссылка операторов управления
В этой главе описываются AppleScript, проверяют утверждения. Оператор управления является оператором, определяющим, когда и как выполняются другие операторы или как оценены выражения. Например, оператор управления может заставить AppleScript пропускать или повторять определенные операторы.
В то время как составные операторы могут содержать другие операторы, включая многократные пункты с вложенными и многострочными операторами, простые операторы могут быть записаны на одной строке. Составной оператор известен как блок операторов.
Составные операторы начинаются с одного или более зарезервированных слов, такой как tell
, это идентифицирует тип, проверяют утверждение. Последняя строка составного оператора всегда запускается с end
, и может дополнительно включать слово, начинающее оператор управления (такой как end tell
).
рассмотрение и игнорирование Операторов
considering
и ignoring
операторы заставляют AppleScript рассматривать или игнорировать определенные характеристики, поскольку он выполняет группы операторов. Существует два вида considering
и ignoring
операторы:
Те, которые указывают атрибуты, которые рассмотрят или проигнорируют в выполнении текстовых сравнений.
Те, которые указывают, должен ли AppleScript рассмотреть или проигнорировать ответы из приложения.
Укажите, как AppleScript должен атрибуты обработок, такие как случай, в выполнении текстовых сравнений.
Синтаксис
|
Заполнители
- атрибут
Характеристика текста:
case
Если этот атрибут проигнорирован, прописные буквы не отличают от строчных букв. Посмотрите Специальные замечания ниже для соответствующей информации. См. также
greater than, less than
для описания как буквы видов AppleScript, пунктуация и другие символы.diacriticals
Если этот атрибут проигнорирован,
text
объекты сравнены, как будто не присутствуют никакие диакритические знаки (такой как´, ', ˆ, ¨, и ˜); например,"résumé"
равно"resume"
.hyphens
Если этот атрибут проигнорирован,
text
объекты сравнены, как будто не присутствуют никакие дефисы; например,"anti-war"
равно"antiwar"
.numeric strings
По умолчанию этот атрибут проигнорирован, и текстовые строки сравнены согласно их символьным значениям. Например, если этот атрибут рассматривают,
"1.10.1" > "1.9.4"
оценивает какtrue
; иначе это оценивает какfalse
. Это может быть полезно в сравнении строк версии.punctuation
Если этот атрибут проигнорирован,
text
объекты сравнены как будто никакие знаки препинания (такой как. , ? : ; ! ' "
) присутствуют; например,"What? he inquired."
равно"what he inquired"
.white space
Если этот атрибут проигнорирован,
text
объекты сравнены, как будто не присутствовали пробелы, символы табуляции и символы возврата; например,"Brick house"
считался бы равным"Brickhouse"
.
- Значение по умолчанию:
- Случай и числовые строки проигнорированы; всех других рассматривают.
- оператор
Любой оператор AppleScript.
Примеры
Следующие примеры показывают как considering
и ignoring
операторы для различных атрибутов могут изменить значение текстовых сравнений.
"Hello Bob" = "HelloBob" --result: false |
ignoring white space |
"Hello Bob" = "HelloBob" --result: true |
end ignoring |
"BOB" = "bob" --result: true |
considering case |
"BOB" = "bob" --result: false |
end considering |
"a" = "á" --result: false |
ignoring diacriticals |
"a" = "á" --result: true |
end considering |
"Babs" = "bábs" --result: false |
ignoring case |
"Babs" = "bábs" --result: false |
end ignoring |
ignoring case and diacriticals |
"Babs" = "bábs" --result: true |
end ignoring |
Обсуждение
Можно вложить considering
и ignoring
операторы. Если тот же атрибут появляется и во внешнем и во внутреннем операторе, атрибут, указанный во внутреннем операторе, имеет приоритет. Когда атрибуты во внутреннем considering
или ignoring
оператор отличается от тех во внешних операторах, они добавляются к атрибутам, которые рассмотрят и проигнорируют.
Специальные замечания
Поскольку text item delimiters
(описанный в версии) уважение considering
и ignoring
атрибуты в AppleScript 2.0, разделители нечувствительны к регистру по умолчанию. Раньше, они были всегда чувствительны к регистру. Для осуществления предыдущего поведения добавьте явное considering case
оператор.
considering
и ignoring
полностью осведомлены о Unicode. Например, с ignoring case
, «Горбач» равен «ГОРБАЧ». Кроме того, символы, проигнорированные diacriticals, дефисами, пунктуацией и пробелом, определяются классами символов Unicode:
ignoring punctuation
игнорирует категорию P*, который включает лево-и правильные кавычки такой как“ ” « »
.ignoring hyphens
игнорирует Фунт категории, включающий их - и короткие тире.ignoring whitespace
игнорирует категорию Z*, плюс вкладка (\t), возвратитесь (\r) и перевод строки (\n), который включает их - en-, и неразрывные пробелы.
Параграф
Разрешает сценарию продолжаться, не ожидая приложения для ответа на команды, предназначающиеся для него.
Синтаксис
|
Заполнители
- оператор
Любой оператор AppleScript.
Примеры
Следующий пример показывает, как использовать оператор игнорирования так, чтобы сценарий не ожидал, в то время как Средство поиска выполняет потенциально длинную задачу:
tell application "Finder" |
ignoring application responses |
empty the trash |
end ignoring |
end tell |
Ваш сценарий может хотеть проигнорировать большинство ответов из приложения, но ожидать ответа на определенный оператор. Можно сделать так вложением considering
и ignoring
операторы:
tell application "Finder" |
ignoring application responses |
empty the trash |
-- other statements that ignore application responses |
considering application responses |
set itemName to name of first item of startup disk |
end considering |
-- other statements that ignore application responses |
end ignoring |
end tell |
Обсуждение
Ответ на команду приложения указывает, возвращает ли команда, завершенная успешно, и также, результаты и сообщения об ошибках, если существует любой. Когда Вы используете ignoring application responses
блок, Вы предшествуете этой информации.
Результаты и сообщения об ошибках от команд AppleScript, пишущий сценарий дополнений и выражений не затронуты application responses
атрибут.
ошибочные Операторы
Во время выполнения сценария ошибки могут произойти в операционной системе (например, когда указанный файл не найден) в приложении (например, когда сценарий указывает объект, не существующий), и в самом сценарии. Сообщение об ошибке является сообщением, предоставляющимся приложением, AppleScript или OS X, когда ошибка происходит во время обработки команды. Сообщение об ошибке может включать код ошибки, который является целым числом, идентифицирующим ошибку; ошибочное выражение, которое является выражением, обычно a text
объект, описывающий ошибку; и другая информация.
Сценарий может сигнализировать ошибку — который может тогда быть обработан обработчиком ошибок — с error
оператор. Это позволяет сценариям предоставлять свои собственные сообщения для ошибок, происходящих в сценарии. Например, сценарий может подготовить обрабатывать ожидаемые ошибки при помощи a try
оператор. В on error
ответвление a try
оператор, сценарий может быть в состоянии восстановиться корректно с ошибки. В противном случае это может использовать error
оператор, чтобы повторно сигнализировать сообщение об ошибке это получает, изменяя сообщение по мере необходимости для предоставления информации, определенной для сценария.
Сигнализирует ошибку в сценарии.
Синтаксис
|
Заполнители
- errorMessage
A
text
объект, описывающий ошибку. Несмотря на то, что этот параметр является дополнительным, необходимо предоставить описания для ошибок по мере возможности. Если Вы не включаете описание ошибки, пустоеtext
объект (»») передается обработчику ошибок.- errorNumber
Код ошибки для ошибки. Это - дополнительный параметр. Если Вы не включаете параметр числа, значение-2700 (неизвестная ошибка) передается обработчику ошибок.
Если ошибка, Вы являетесь сигнальными, является близким соответствием для того, уже имеющего постоянную ошибку AppleScript, можно использовать ту константу. Если необходимо создать новое число для ошибки, избегать использования той, конфликтующей с кодами ошибки, определенными AppleScript, OS X и менеджером по корпоративным мероприятиям Apple. В целом необходимо использовать положительные числа от 500 до 10 000. Для получения дополнительной информации посмотрите Коды ошибки и сообщения об ошибках.
- resultList
Список объектов. Применяется только к командам, возвращающим результаты для многократных объектов. Если результаты для некоторых, но не всех, объектов, указанных в команде, доступны, можно включать их в частичный параметр результата. Это редко поддерживается приложениями.
- offendingObject
Ссылка на объект, если таковые имеются, который вызвал ошибку.
- expectedType
Класс. Если параметр, указанный в команде, не имел ожидаемого класса, и AppleScript был неспособен принудить его к ожидаемому классу, то можно включать ожидаемый класс в
to
параметр.
Примеры
Следующий пример использует a try
оператор для обработки простой ошибки, и демонстрирует, как можно использовать error
оператор для фиксации ошибки затем повторно сигнализируйте ошибку точно, поскольку это было получено, заставив AppleScript вывести на экран ошибочное диалоговое окно (и выполнение останова):
try |
word 5 of "one two three" |
on error eStr number eNum partial result rList from badObj to expectedType |
-- statements that take action based on the error |
display dialog "Doing some preliminary handling..." |
-- then resignal the error |
error eStr number eNum partial result rList from badObj to expectedType |
end try |
В следующем примере, error
оператор повторно сигнализирует ошибку, но опускает любую исходную информацию об ошибке и предоставляет ее собственное сообщение для появления в ошибочном диалоговом окне:
try |
word 5 of "one two three" |
on error |
-- statements to execute in case of error |
error "There are not enough words." |
end try |
Для более всесторонних примеров посмотрите Работу с Ошибками.
если Операторы
if
оператор позволяет Вам определять операторы или группы операторов, выполняющихся только при определенных обстоятельствах, на основе оценки одной или более булевых выражений.
if
оператор также вызывают условным оператором. Булевы выражения в if
операторы также вызывают тестами.
Если булево выражение оценивает к, выполняет оператор true
.
Синтаксис
|
Заполнители
- булевская переменная
Булево выражение.
- оператор
Любой оператор AppleScript.
Примеры
Этот сценарий выводит на экран диалоговое окно если значение булева выражения ageOfCat > 1
true
. (Переменная ageOfCat
установлен ранее.)
if ageOfCat > 1 then display dialog "This is not a kitten." |
Если булево выражение (или выражения) оценивает к, выполняет группу (или группы) операторов true
.
Синтаксис
|
Заполнители
- булевская переменная
Булево выражение.
- оператор
Любой оператор AppleScript.
Примеры
Следующий пример использует составной объект if
оператор, с финалом else
пункт, для отображения оператора на основе текущей температуры (полученный отдельно):
if currentTemp < 60 then |
set response to "It's a little chilly today." |
else if currentTemp > 80 then |
set response to "It's getting hotter today." |
else |
set response to "It's a nice day today." |
end if |
display dialog response |
Обсуждение
if
оператор может содержать любое число else if
пункты; AppleScript ищет первое булево выражение, содержавшееся в if
или else if
пункт, который является true
, выполняет операторы, содержавшиеся в его блоке (операторы между одним else if
и следующий else if
или else
пункт), и затем выходит if
оператор.
if
оператор может также включать финал else
пункт. Операторы в его блоке выполняются если никакой другой тест в if
передачи оператора.
повторите Операторы
Вы используете a repeat
оператор, чтобы создать циклы или выполнить группы повторных операторов в сценариях.
Существует много типов repeat
оператор, каждый отличающийся по пути это завершает цикл. Каждая из опций, от повторения цикла, определенное число раз, к цикличному выполнению по элементам в списке, к цикличному выполнению до условия встречено, и т.д., предоставляет себя определенным видам задач.
Для получения информации о тестировании и отладке repeat
операторы, посмотрите Отладку Сценарии AppleScript.
Завершает a repeat
цикл и выполнение резюме с оператором, следующим repeat
оператор.
Можно только использовать exit
оператор внутри a repeat
оператор. Хотя обычно используется с repeat (forever)
форма, можно также использовать exit
оператор с другими типами repeat
оператор.
Синтаксис
|
Примеры
Посмотрите пример в repeat (forever)
.
Повторяет оператор (или операторы) до exit
с оператором встречаются.
Завершать a repeat
(навсегда) оператор, Вы можете:
Используйте
exit
оператор и проект логика так, чтобы это в конечном счете встретилосьexit
оператор.Используйте a
“return”
оператор, выходящий из обработчика или сценария, содержащего цикл, и поэтому цикл также.Используйте a
try
оператор и полагается на состояние ошибки для выхода из цикла.
Синтаксис
|
Заполнители
- оператор
-
Любой оператор AppleScript.
Примеры
Эта форма repeat
оператор подобен repeat until
форма, за исключением того, что вместо того, чтобы вставить тест repeat
сам оператор, Вы определяете в цикле, когда пора выйти. Вы могли бы использовать эту форму, например, для ожидания длинной или неопределенной работы для завершения:
repeat |
-- perform operations |
if someBooleanTest then |
exit repeat |
end if |
end repeat |
В приложении сценария, остающемся открытым, можно использовать idle
обработчик для выполнения периодических задач, таких как проверка работу для завершения. Посмотрите неактивные Обработчики для получения дополнительной информации.
Повторяет оператор (или операторы) конкретное количество времен.
Синтаксис
|
Заполнители
- целое число
-
Указывает число раз для повторения операторов в организации цикла.
Вместо целого числа, можно указать любое значение, которое может быть принуждено к целому числу.
Если значение - меньше чем один, организация
repeat
оператор не выполняется. - оператор
-
Любой оператор AppleScript.
Примеры
Следующий обработчик использует repeat (number) times
форма repeat
оператор для увеличивания переданного числа к переданному питанию:
on raiseToTheNth(x, power) |
set returnVal to x |
repeat power - 1 times |
set returnVal to returnVal * x |
end repeat |
return returnVal |
end raiseToTheNth |
Повторяет оператор (или операторы), пока не удовлетворяют условию. Тестирует условие прежде, чем выполнить любые операторы.
Синтаксис
|
Заполнители
- булевская переменная
Булево выражение. Если это имеет значение
true
при вводе цикла не выполняются операторы в цикле.- оператор
Любой оператор AppleScript.
Примеры
Следующий пример использует repeat until
форма repeat
оператор, чтобы позволить пользователю вводить записи базы данных. Обработчик enterDataRecord()
, который не показан, возвраты true
если пользователь сделан, введя записи:
set userDone to false |
repeat until userDone |
set userDone to enterDataRecord() |
end repeat |
Повторяет оператор (или операторы), поскольку долго в качестве одного из условий встречен. Тестирует условие прежде, чем выполнить любые операторы. Подобный repeat until
форма, за исключением того, что это продолжается, в то время как условие true
, вместо того, пока это не true
.
Синтаксис
|
Заполнители
- булевская переменная
Булево выражение. Если это имеет значение
false
при вводе цикла не выполняются операторы в цикле.- оператор
Любой оператор AppleScript.
Примеры
Следующий пример использует repeat while
форма repeat
оператор, чтобы позволить пользователю вводить записи базы данных. В этом случае мы только что инвертировали логику, показанную в repeat until
пример. Здесь, обработчик enterDataRecord()
, который не показан, возвраты true
если пользователь не сделан, введя записи:
set userNotDone to true |
repeat while userNotDone |
set userNotDone to enterDataRecord() |
end repeat |
Повторяет оператор (или операторы), пока значение переменной цикла управления не превышает значение предопределенного значения остановки.
Синтаксис
|
Заполнители
- loopVariable
Управляет числом итераций. Это может быть ранее определенная переменная или новая переменная, которую Вы определяете в
repeat
оператор.- startValue
Указывает значение, присваивающееся loopVariable, когда вводится цикл.
Можно указать целое число или любое значение, которое может быть принуждено к целому числу.
- stopValue
Указывает значение. Когда то значение превышено значением loopVariable, итеративных концов. Если stopValue является меньше, чем startValue, организация не выполняется.
Можно указать целое число или любое значение, которое может быть принуждено к целому числу.
- stepValue
Указывает значение, добавляющееся к loopVariable после каждой итерации цикла. Можно присвоиться
integer
или areal
значение; areal
значение округлено кinteger
.- Значение по умолчанию:
- 1
- оператор
Любой оператор AppleScript.
Примеры
Следующий обработчик использует repeat with loopVariable (from startValue to stopValue)
форма repeat
оператор для вычислений факториального значения (факториал числа является продуктом всех положительных целых чисел от 1 до того числа):
on factorial(x) |
set returnVal to 1 |
repeat with n from 2 to x |
set returnVal to returnVal * n |
end repeat |
return returnVal |
end factorial |
Обсуждение
Можно использовать существующую переменную в качестве переменной цикла в a repeat with loopVariable (from startValue to stopValue)
оператор или определяет новый в операторе. В любом случае переменная цикла определяется вне цикла. Можно изменить значение переменной цикла в теле цикла, но это будет сброшено к следующему значению цикла в следующий раз через цикл. После того, как цикл завершается, переменная цикла сохраняет свое последнее значение.
AppleScript оценивает startValue, stopValue, и stepValue, когда это начинает выполнять цикл и хранит значения внутренне. В результате при изменении значений в организации цикла она не изменяет выполнение цикла.
Циклы через элементы в указанном списке.
Число итераций равно числу элементов в списке. В первой итерации значение переменной является ссылкой на первый элемент в списке во второй итерации, это - ссылка на второй элемент в списке и т.д.
Синтаксис
|
Заполнители
- loopVariable
Любая ранее определенная переменная или новая переменная Вы определяете в
repeat
оператор (см. Обсуждение).- список
Список или объектный спецификатор (такой как
words 1 thru 5
) чье значение является списком.список может также быть записью; AppleScript принуждает запись на список (см. Обсуждение).
- оператор
Любой оператор AppleScript.
Примеры
Следующий сценарий исследует список слов с repeat with loopVariable (in list)
форма repeat
оператор, выводя на экран диалоговое окно, если это считает слово «молотком» в списке. Обратите внимание на то, что в цикле, переменная цикла (currentWord
) ссылка на элемент в списке, таким образом, в тестовом операторе (if contents of currentWord is equal to "hammer" then
) это должно быть брошено к тексту (as text
).
set wordList to words in "Where is the hammer?" |
repeat with currentWord in wordList |
log currentWord |
if contents of currentWord is equal to "hammer" then |
display dialog "I found the hammer!" |
end if |
end repeat |
Оператор log currentWord
регистрирует текущий элемент списка к окну журнала Редактора сценариев. Для получения дополнительной информации посмотрите Отладку Сценарии AppleScript.
Обсуждение
Можно использовать существующую переменную в качестве переменной цикла в a repeat with loopVariable (in list)
оператор или определяет новый в repeat with…
оператор. В любом случае переменная цикла определяется вне цикла. Можно изменить значение переменной цикла в теле цикла, но это будет сброшено к следующему значению цикла в следующий раз через цикл. После того, как цикл завершается, переменная цикла сохраняет свое последнее значение.
AppleScript оценивает loopVariable in
перечислите как объектный спецификатор, берущий значение item 1 of list
, item 2 of list
, item 3 of list
, и т.д., пока это не достигает последнего элемента в списке, как показано в следующем примере:
repeat with i in {1, 2, 3, 4} |
set listItem to i |
end repeat |
--result: item 4 of {1, 2, 3, 4} --result: an object specifier |
Установить переменную в значение элемента в списке, а не ссылку на элемент, использование contents of
свойство:
repeat with i in {1, 2, 3, 4} |
set listItem to contents of i |
end repeat |
--result: 4 |
Можно также использовать элементы списка непосредственно в выражениях:
set total to 0 |
repeat with i in {1, 2, 3, 4} |
set total to total + i |
end repeat |
--result: 10 |
Если значение списка является записью, AppleScript принуждает запись на список путем разделения меток свойства. Например, {a:1, b:2, c:3}
становится {1, 2, 3}
.
скажите Операторы
A tell
оператор указывает цель по умолчанию — т.е. объект, в который отправляются команды, если они не включают прямой параметр. Операторы в a tell
оператор, которые используют терминологию от предназначенного объекта, компилируется против словаря того объекта.
Объект a tell
оператор обычно является ссылкой на объект приложения или a script
объект. Например, следующий tell
оператор предназначается для приложения Средства поиска:
tell application "Finder" |
set frontWindowName to name of front window |
-- any number of additional statements can appear here |
end tell |
Можно вложить tell
операторы в другом tell
операторы, пока Вы следуете за синтаксисом и правилами, описанными в tell (compound)
.
Когда необходимо вызвать обработчик из a tell
оператор, существуют специальные термины, которые Вы используете, чтобы указать, что обработчик является частью сценария и не команды, которая должна быть отправлена в объект tell
оператор. Эти условия описаны в этом и мне Ключевые слова и в Призыве Обработчиков сказать Оператор.
A tell
оператор, предназначающийся для локального приложения, не заставляет его запускаться, если оно уже не работает. Например, сценарий может исследовать running
свойство предназначенного application
объект определить, работает ли приложение прежде, чем попытаться отправить ему какие-либо команды. Если это не будет работать, то это не будет запущено.
Если a tell
оператор предназначается для локального приложения и выполняет любые операторы, требующие ответа от приложения, тогда AppleScript запустит приложение, если это не будет уже работать. Приложение запускается, как скрытый, но сценарий может отправить его activate
команда для выявления его, в случае необходимости.
A tell
оператор, предназначающийся для удаленного приложения, не заставит его запускаться — фактически, оно не будет компилировать или работать, если не будет уже работать приложение. И при этом это не возможно к доступу running
свойство приложения на удаленном компьютере.
Указывает целевой объект и команду для отправки к нему.
Синтаксис
|
Заполнители
- referenceToObject
-
Любой объект. Обычно объектный спецификатор или a
reference
объект (который содержит объектный спецификатор). - оператор
-
Любой оператор AppleScript.
Примеры
Это простое tell
оператор закрывает переднее окно Finder:
tell front window of application "Finder" to close |
Для получения дополнительной информации о том, как указать объект приложения, посмотрите application
класс.
Указывает целевой объект и одну или более команд для отправки к нему. Составной объект tell
оператор отличается от простого tell
оператор в этом это всегда включает end
оператор.
Синтаксис
|
Заполнители
- referenceToObject
Любой объект. Обычно объектный спецификатор или a
reference
объект (который содержит объектный спецификатор).- оператор
-
Любой оператор AppleScript, включая другого
tell
оператор.
Примеры
Следующие утверждения показывают, как закрыть окно, использующее сначала составной объект tell
оператор, затем с двумя изменениями простого tell
оператор:
tell application "Finder" |
close front window |
end tell |
tell front window of application "Finder" to close |
tell application "Finder" to close front window |
Следующий пример показывает вложенный tell
оператор:
tell application "Finder" |
tell document 1 of application "TextEdit" |
set newName to word 1 -- handled by TextEdit |
end tell |
set len to count characters in newName -- handled by AppleScript |
if (len > 2) and (len < 15) then -- comparisons handled by AppleScript |
set name of first item of disk "HD" to newName -- handled by Finder |
end if |
end tell |
Этот пример работает, потому что в каждом случае терминология, понятая под определенным приложением, используется в a tell
блок, предназначающийся для того приложения. Если бы Вы попросили у Средства поиска, Однако это не скомпилировало бы word 1
из документа, или сказал TextEdit set name
из первого элемента на диске, потому что те приложения не поддерживают те условия.
попробуйте Операторы
A try
оператор обеспечивает средние значения для сценариев для обработки потенциальных ошибок. Это пытается выполнить один или несколько операторов и, если ошибка происходит, выполняет отдельный набор операторов для контакта с состоянием ошибки. Если ошибка происходит и существует нет try
оператор в цепочке вызова для обработки его AppleScript выводит на экран ошибку и остановки выполнения сценария.
Для соответствующей информации посмотрите ошибочные Операторы и Обработку ошибок AppleScript.
Попытки выполнить список операторов AppleScript, вызывая обработчик ошибок, если какой-либо из операторов приводит к ошибке.
A try
оператор является составным оператором с двумя частями, содержащим серию операторов AppleScript, сопровождаемых обработчиком ошибок, который будет вызван, если какой-либо из тех операторов вызывает ошибку. Если оператор в a, вызвавший ошибку включен try
оператор, тогда AppleScript передает управление к обработчику ошибок. После того, как обработчик ошибок завершается, управление сразу передает оператору после конца try
оператор.
Синтаксис
|
Заполнители
- оператор
Любой оператор AppleScript.
- errorMessage
A
text
объект, описывающий ошибку.- errorNumber
Код ошибки, целое число. Для возможных значений посмотрите Коды ошибки и сообщения об ошибках.
- offendingObject
Ссылка на объект, если таковые имеются, который вызвал ошибку.
- resultList
Произошел список, обеспечивающий частичные результаты для объектов, обработанных перед ошибкой. Список может содержать значения любого класса. Этот параметр применяется только к командам, возвращающим результаты для многократных объектов. Это редко поддерживается приложениями.
- expectedType
Ожидаемый класс. Если ошибка была вызвана отказом приведения, значение этой переменной является классом переставшего работать приведения. (Второй пример ниже шоу, как это работает в случае, где AppleScript неспособен принудить a
text
объект вinteger
.)- переменная
Или глобальная переменная или локальная переменная, которая может использоваться в обработчике. Переменная может содержать любой класс имеющий значение. Объем локальной переменной является обработчиком. Объем глобальной переменной расширяется на любую другую часть сценария, включая другие обработчики и
script
объекты. Для соответствующей информации о локальных и глобальных переменных посмотрите версию.
Примеры
Следующий пример показывает, как можно использовать a try
оператор для обработки кнопки «Cancel» для a display alert
команда. Отмена возвращает код ошибки-128, но не является действительно ошибкой. Этот тестовый обработчик просто выводит на экран диалоговое окно для указания, когда пользователь отменяет или когда происходит некоторая другая ошибка.
try |
display alert "Hello" buttons {"Cancel", "Yes", "No"} cancel button 1 |
on error errText number errNum |
if (errNum is equal to -128) then |
-- User cancelled. |
display dialog "User cancelled." |
else |
display dialog "Some other error: " & errNum & return & errText |
end if |
end try |
Можно также использовать упрощенную версию try
оператор, проверяющий на просто единственный код ошибки. В следующем примере только обрабатывается ошибка-128. Любой другой код ошибки проигнорирован этим try
оператор, но автоматически отказан цепочка вызова, где это может быть обработано другим try
операторы.
try |
display alert "Hello" buttons {"Cancel", "Yes", "No"} cancel button 1 |
on error number -128 |
-- Either do something special to handle Cancel, or just ignore it. |
end try |
Следующий пример демонстрирует использование to
ключевое слово для получения дополнительной информации об ошибке, происходящей во время отказа приведения:
try |
repeat with i from 1 to "Toronto" |
-- do something that depends on variable "i" |
end repeat |
on error from obj to newClass |
log {obj, newClass} -- Display from and to info in log window. |
end try |
Это repeat
оператор перестал работать потому что text
объект "Toronto"
не может быть принужден к integer
. Обработчик ошибок просто пишет значения obj
(незаконное значение, "Toronto"
) и newClass
(класс приведения, переставшего работать, integer
) к окну Event Log History Редактора сценариев (и к области Event Log окна сценария). Результат “(*Toronto, целое число*)”, указывая, что ошибка произошла при попытке принудить «Торонто» к целому числу.
Для дополнительных примеров посмотрите Работу с Ошибками.
используйте Операторы
A use
оператор объявляет требуемый ресурс для сценария — приложения, библиотеки сценария, платформы, или версии самого AppleScript — и может дополнительно импортировать терминологию из ресурса для использования в другое место в сценарии. Эффекты и синтаксис use
варьируйтесь немного в зависимости от используемого ресурса; различные случаи описаны ниже.
Основная функция use
должен потребовать, чтобы ресурс присутствовал, прежде чем сценарий начинает выполняться. Если требование не может быть удовлетворено, сценарий не будет работать. A use
оператор может также указать минимальную версию для требуемого ресурса, такого как минимальная совместимая версия приложения. В этом примере AppleScript гарантирует, что версия 7.0 Safari или позже доступна:
use application "Safari" version "7.0" |
use
операторы могут также импортировать терминологию из используемого ресурса, делая условия доступными всюду по сценарию, не требуя использования tell
или using terms from
. AppleScript отслеживает, куда условия были импортированы из, и отправляет события, использующие те термины к той цели. Обычно, команды отправляются в текущую цель (it
) как описано в Target, но импортированной терминологии переопределяет это. Если …
идентификатор события импортируется
прямой параметр является импортированным классом или идентификатором перечисления
прямой параметр является объектным спецификатором, заканчивающимся импортированным сроком
… тогда команда отправляется в источник импорта вместо этого. Даже если команда внутри a, это происходит tell
блок для различной цели. Например, этот сценарий использует команду от Safari:
use application "Safari" |
search the web for "AppleScript" |
Импорт происходит по умолчанию, но может быть подавлен с помощью without importing
параметр, если применимо. Можно использовать это для добавления требований к существующим сценариям, не изменяя ничто больше о сценарии:
use application "Safari" version "7.0" without importing |
Поскольку условия Safari не импортируются, сценарий должен будет все еще использовать tell
отправить ему события.
Объявляет требуемую минимальную версию AppleScript, и что сценарий ожидает более новое поведение для того, как пишущие сценарий дополнения обработаны, описаны в использовании (пишущий сценарий дополнений).
Синтаксис
|
Заполнители
- versionText
Требуемая минимальная версия AppleScript, как строка версии такой как
"2.3.2"
. Если опущено, ее значение по умолчанию 2.3, версия в которыйuse
был представлен. Это значение всегда является текстом, не числом, и сравнено как будтоconsidering numeric strings
имеет силу. Например,"2.10"
больше, чем"2.3"
, потому что 10 больше, чем 3.
Примеры
В его самой простой форме, use
может использоваться, чтобы объявить, что сценарий использует AppleScript:
use AppleScript |
Это также неявно означает, что сценарий использует версию 2.3 AppleScript или позже, когда use
был сначала представлен, и что сценарий ожидает более новое поведение для того, как пишущие сценарий дополнения обработаны, описаны в использовании (пишущий сценарий дополнений).
A use
команда может также явно указать минимальную требуемую версию AppleScript:
use AppleScript version "2.3.2" |
Объявляет, что сценарий использует дополнения сценариев.
Синтаксис
|
Заполнители
- булевская переменная
Булево значение,
true
илиfalse
. AppleScript перекомпилирует это кwith importing
илиwithout importing
. Значение по умолчаниюwith importing
.
Примеры
Использовать use scripting additions
к explictly объявляют что использование сценария, пишущее сценарий дополнительных команд:
use scripting additions |
Обсуждение
Если сценарий имеет, пишущие сценарий дополнительные команды обрабатываются по-другому use
команды. Если сценарий имеет один или больше use
команды любого вида, пишущие сценарий дополнительные команды не доступны по умолчанию. Необходимо явно указать, что Вы хотите использовать дополнения сценариев, любого с a use
или using terms from
команда.
use scripting additions |
display dialog "hello world" |
using terms from scripting additions |
display dialog "hello world" |
end using terms from |
Если сценарий использует use scripting additions
, AppleScript может оптимизировать дополнительные команды сценариев, отправив им в текущее приложение вместо текущей цели (it
) когда это не изменяет значение сделать так. Например, случайное число не должно быть отправлено в другое рвение правильно и будет всегда отправляться в текущее приложение, когда импортировано с use
. Без a use scripting additions
команда, AppleScript должен использовать менее эффективную схему диспетчеризации, таким образом, рекомендуется явно объявление их.
Объявляет требуемую библиотеку приложения или сценария и может импортировать ее условия для использования позже в сценарии.
Синтаксис
|
Заполнители
- versionText
Требуемая минимальная версия ресурса как номер версии, такой как
"2.3.2"
. Это значение всегда является текстом, не числом, и сравнено как будтоconsidering numeric strings
имеет силу. Например,"2.10"
больше, чем"2.3"
, потому что 10 больше, чем 3.- идентификатор
Дополнительный идентификатор для ресурса.
- спецификатор
Данные спецификатора для ресурса. Это обычно - имя, как в
use application "Finder"
илиuse script "My Library"
, но может быть любая допустимая форма спецификатора, такой как ID, как вuse application id "com.apple.mail"
.- булевская переменная
Булево значение,
true
илиfalse
. AppleScript перекомпилирует это кwith importing
илиwithout importing
. Значение по умолчаниюwith importing
.
Примеры
A use
команда может обратиться к приложению:
use application "Finder" |
… или библиотека сценария:
use script "Happy Fun Ball" |
Если дополнительный идентификатор дан, он определяет свойство, значение которого является требуемым ресурсом. Это может сделать более удобным относиться к ресурсу, как в этом примере: get
оператор использует идентификатор Safari
вместо полного спецификатора application "Safari"
.
use Safari : application "Safari" |
get the name of Safari's front window |
При помощи use
с многократными приложениями можно объединить условия из других источников способами невозможное использование tell
, потому что tell
только делает один источник терминологии доступным за один раз. Например, следующий сценарий, в одном операторе, использует Почту и Safari для поиска сети отправителя в настоящее время выбираемого сообщения электронной почты. get
событие отправляется в Почту, потому что это определяет message viewer
, в то время как search the web
событие отправляется в Safari.
use application "Mail" |
use application "Safari" |
search the web for the sender of the first item of ¬ |
(get selected messages of the front message viewer) |
Объявляет требуемую платформу для использования с мостом AppleScript/Objective-C. Это только поддерживается в библиотеках сценария.
Синтаксис
|
Заполнители
- спецификатор
Данные спецификатора для ресурса. Это может быть базовым именем (
"AppKit"
), полное имя ("AppKit.framework"
), или путь POSIX ("/System/Library/Frameworks/AppKit.framework"
).
Примеры
Большинство сценариев, использующих мост AppleScript/Objective-C, должно иметь по крайней мере один из этих двух use
операторы:
use framework "Foundation" |
use framework "AppKit" |
Можно также использовать другие платформы, такие как WebKit:
use framework "WebKit" |
Обсуждение
Когда Вы объявляете требуемую платформу, AppleScript гарантирует, что платформа загружается прежде, чем выполнить Ваш сценарий. Чтобы гарантировать, чтобы Ваши библиотеки сценария AppleScript/Objective-C работали правильно в любом приложении, объявите все необходимые платформы явно; иначе, нет никакой гарантии, что данная платформа будет доступна, и Ваш сценарий может перестать работать.
version
параметр не поддерживается для платформ; чтобы проверить действительно ли поддержка платформы определенная функция, использовать NSClassFromString
или -respondsToSelector:
.
использование терминов от Операторов
A using terms from
оператор позволяет Вам указать, какую терминологию AppleScript должен использовать в компиляции операторов в сценарии. Принимая во внимание, что a tell
оператор указывает цель по умолчанию (часто приложение), в который команды отправляются и терминология для использования, a using terms from
оператор указывает только терминологию.
A using terms from
оператор может быть полезным в записи сценариев обработчика событий приложения, таким как Почтовые правила.
Другое использование для этого типа оператора со сценарием, предназначающимся для приложения на удаленном компьютере, который может не быть доступным, когда Вы компилируете сценарий (или приложение может не работать). Или, Вы могли бы разрабатывать локально и только хотеть протестировать с удаленным приложением в более позднее время. В любом случае можно использовать a using terms from
оператор для указания локального приложения (по-видимому с терминологией, соответствующей тот на удаленном компьютере) скомпилировать против.
Даже если оператор содержится в a using terms from
компиляции оператора, сценарий может перестать работать, когда выполнено, потому что терминология целевого приложения может отличаться от используемого в компиляции.
Можно вложить using terms from
операторы. Когда Вы делаете так, каждый оператор сценария компилируется против терминологии приложения, названного в самом внутреннем включении using terms from
оператор.
Дает AppleScript команду использовать терминологию из указанного источника в компиляции вложенных операторов.
Синтаксис
|
Заполнители
- приложение
Спецификатор для объекта приложения.
- сценарий
Спецификатор для библиотеки сценария.
- оператор
Любой оператор AppleScript.
Примеры
Следующий пример показывает, как использовать a using terms from
оператор в записи Почтового сценария действия правила. Эти сценарии принимают следующую форму:
using terms from application "Mail" |
on perform mail action with messages theMessages for rule theRule |
tell application "Mail" |
-- statements to process each message in theMessages |
end tell |
end perform mail action with messages |
end using terms from |
Для использования сценария Вы открываете Preferences для Почтового приложения, создаете или редактируете правило и присваиваете сценарий как действие для правила.
Для примера, работающего с приложением на удаленной машине, посмотрите Удаленные приложения Предназначения.
Как обсуждено в Операторах использования, сценарии с любым use
операторы не делают дополнительные условия сценариев видимыми по умолчанию. Можно позволить писать сценарий дополнительных условий для определенных частей сценария с using terms from
как в этом примере:
use AppleScript |
-- scripting addition commands such as "display dialog" will not compile here... |
using terms from scripting additions -- ...but will compile within this block. |
display dialog "Hello world!" |
end using terms from |
Обсуждение
using terms from
не импортирует условия как use
делает и подвергается тем же пределам на использовании терминологии как tell
. using terms from scripting additions
не включает оптимизацию сценариев дополнительных команд как use scripting additions
делает.
с Операторами тайм-аута
Можно использовать a with timeout
оператор для управления, сколько времени AppleScript ожидает команды для выполнения перед таймаутом. По умолчанию, когда приложению не удается реагировать на команду, AppleScript ожидает в течение двух минут прежде, чем сообщить об ошибке и остановить выполнение.
Указывает, сколько времени AppleScript ожидает ответа на команду, отправляющуюся в другое приложение.
Синтаксис
|
Заполнители
- integerExpression
Количество времени, в секундах, AppleScript должен ожидать прежде, чем привести к таймауту (и прервать команду).
- оператор
Любой оператор AppleScript.
Примеры
Следующий сценарий говорит TextEdit закрывать свой первый документ; если документ был изменен, он спрашивает пользователя, если должен быть сохранен документ. Это включает оператор with timeout of 20 seconds
, так, чтобы, если пользователь не завершается close
работа в течение 20 секунд, работа испытывает таймаут.
tell application "TextEdit" |
with timeout of 20 seconds |
close document 1 saving ask |
end timeout |
end tell |
Обсуждение
Когда команде не удается завершиться в выделенное время (ли значение по умолчанию двух минут или времени, установленного a with timeout
оператор), AppleScript прекращает выполнять сценарий и возвращает ошибку "event timed out"
. AppleScript не отменяет работу — это просто останавливает выполнение сценария. Если Вы хотите, чтобы сценарий продолжался, можно обернуть операторы в a try
оператор. Однако, ли Ваш сценарий может отправить команду для отмены нарушающей длинной работы после того, как тайм-аут зависит от приложения, выполняющего команду.
A with timeout
оператор применяется только к командам, отправленным в объекты приложения, не в команды, отправленные в приложение, выполняющее сценарий.
В некоторых ситуациях можно хотеть использовать ignoring application responses
оператор (вместо a with timeout
оператор) так, чтобы Ваш сценарий не ожидал команд приложения для завершения. Для получения дополнительной информации посмотрите рассмотрение и игнорирование Операторов.
с Операторами транзакции
При выполнении сценария AppleScript может отправить одно или более событий Apple в целевые приложения. Транзакция является рядом операций, применяющихся как единый блок — или все изменения применяются, или ни один не. Этот механизм работает только с приложениями, поддерживающими его.
Связывает единственный идентификатор операции с любыми событиями, отправленными в целевое приложение в результате выполняющихся команд в организации оператора.
Синтаксис
|
Заполнители
- сеанс
Объект, идентифицирующий определенный сеанс.
- оператор
Любой оператор AppleScript.
Примеры
Этот пример использует a with transaction
оператор, чтобы гарантировать, что запись может быть изменена одним пользователем, не будучи измененным другим пользователем одновременно. (В следующих примерах, “Маленький DB” и “Супер DB” являются представительными приложениями базы данных.)
tell application "Small DB" |
with transaction |
set oldName to Field "Name" |
set oldAddress to Field "Address" |
set newName to display dialog ¬ |
"Please type a new name" ¬ |
default answer oldName |
set newAddress to display dialog ¬ |
"Please type the new address" ¬ |
default answer oldAddress |
set Field "Name" to newName |
set Field "Address" to newAddress |
end transaction |
end tell |
set
операторы получают текущую стоимость полей Name and Address и приглашают пользователя изменять их. Включение их set
операторы на сингле with transaction
оператор сообщает приложению, что другим пользователям нельзя разрешить получить доступ к той же записи одновременно.
A with transaction
оператор работает только с приложениями, явно поддерживающими его. Некоторые приложения только поддерживают with transaction
операторы (как тот в предыдущем примере), которые не берут объект сеанса в качестве параметра. Другая поддержка приложений оба with transaction
операторы, не имеющие никакого параметра и with transaction
операторы, берущие параметр сеанса.
Следующий пример демонстрирует, как указать сеанс для a with transaction
оператор:
tell application "Super DB" |
set mySession to make session with data {user: "Bob", password: "Secret"} |
with transaction mySession |
... |
end transaction |
end tell |