Ссылка операторов
В этой главе описываются операторов AppleScript. Оператор является символом, словом или фразой, получающей значение на другое значение или пару значений. Работа является оценкой выражения, содержащего оператора. Операнд является выражением, на которое оператор получает значение.
AppleScript обеспечивает логические и математические операторы, а также операторов для включения, связи и получения ссылки на объект. Операторов, воздействующих на два значения, вызывают бинарными операторами, в то время как операторы, воздействующие на единственное значение, известны как унарные операторы.
Первая часть этой главы содержит две таблицы: Таблица 9-1 суммирует всех операторов, которых использует AppleScript, и Таблица 9-2 показывает порядок, в котором AppleScript оценивает операторов в выражениях. Остальная часть главы показывает, как AppleScript оценивает представительных операторов в выражениях сценария.
Оператор AppleScript | Описание |
---|---|
Логическая конъюнкция. Двоичный логический оператор, комбинирующий два булевых значения. Результат Если, AppleScript проверяет левый операнд сначала и Класс операндов: Класс результата: | |
Логическая дизъюнкция. Двоичный логический оператор, комбинирующий два булевых значения. Результат Если, AppleScript проверяет левый операнд сначала и Класс операндов: Класс результата: | |
Бинарный оператор, присоединяющийся к двум значениям. Если левый операнд является a Если операнд налево является записью, результатом является запись. Если операнд налево принадлежит какому-либо другому классу, результатом является список. Для получения дополнительной информации посмотрите Класс операндов: любой | |
| Равенство. Двоичный оператор сравнения, приводящий к Для получения дополнительной информации посмотрите Класс операндов: Класс результата: |
| Неравенство. Двоичный оператор сравнения, приводящий к Для получения дополнительной информации посмотрите Класс операндов: Класс результата: |
| Больше, чем. Двоичный оператор сравнения, приводящий к Оба операнда должны оценить к значениям того же класса. Если они не делают, AppleScript пытается принудить правый операнд к классу левого операнда. Для получения дополнительной информации посмотрите Класс операндов: Класс результата: |
| Меньше, чем. Двоичный оператор сравнения, приводящий к Оба операнда должны оценить к значениям того же класса. Если они не делают, AppleScript пытается принудить правый операнд к классу операнда налево. Для получения дополнительной информации посмотрите Класс операндов: Класс результата: |
| Больше, чем или равный. Двоичный оператор сравнения, приводящий к Оба операнда должны оценить к значениям того же класса. Если они не делают, AppleScript пытается принудить правый операнд к классу операнда налево. Метод использование AppleScript для определения, какое значение больше, зависит от класса операндов. Класс операндов: Класс результата: |
| Меньше чем или равный. Двоичный оператор сравнения, приводящий к Оба операнда должны оценить к значениям того же класса. Если они не делают, AppleScript пытается принудить правый операнд к классу операнда налево. Метод использование AppleScript для определения, какое значение больше, зависит от класса операндов. Класс операндов: Класс результата: |
| Запускается с. Двоичный оператор включения, приводящий к Оба операнда должны оценить к значениям того же класса. Если они не делают, AppleScript пытается принудить правый операнд к классу операнда налево. Для получения дополнительной информации посмотрите Класс результата: |
Концы с. Двоичный оператор включения, приводящий к Оба операнда должны оценить к значениям того же класса. Если они не делают, AppleScript пытается принудить правый операнд к классу операнда налево. Для получения дополнительной информации посмотрите Класс результата: | |
Включение. Двоичный оператор включения, приводящий к Оба операнда должны оценить к значениям того же класса. Если они не делают, AppleScript пытается принудить правый операнд к классу операнда налево. Для получения дополнительной информации посмотрите Класс операндов: Класс результата: | |
| Невключение. Двоичный оператор включения, приводящий к Оба операнда должны оценить к значениям того же класса. Если они не делают, AppleScript пытается принудить правый операнд к классу левого операнда. Для получения дополнительной информации посмотрите Класс операндов: Класс результата: |
| Включение. Двоичный оператор включения, приводящий к Оба операнда должны оценить к значениям того же класса. Если они не делают, AppleScript пытается принудить левый операнд к классу правого операнда. Для получения дополнительной информации посмотрите Класс операндов: Класс результата: |
| Невключение. Двоичный оператор включения, приводящий к Оба операнда должны оценить к значениям того же класса. Если они не делают, AppleScript пытается принудить левый операнд к классу правого операнда. Для получения дополнительной информации посмотрите Класс операндов: Класс результата: |
Умножение. Оператор двоичной арифметики, умножающий число с его левой стороны от него и число с его правой стороны от него. Класс операндов: Класс результата: | |
Дополнение. Оператор двоичной арифметики, добавляющий число или дату с ее левой стороны от него и число или дату с ее правой стороны от него. Только целые числа могут быть добавлены к датам. AppleScript интерпретирует такое целое число как много секунд. Как унарный оператор, Класс операндов: Класс результата: | |
| Вычитание. Двоичный или унарный арифметический оператор. Бинарный оператор вычитает число с его правой стороны от него от числа или даты с его левой стороны от него. Унарный оператор делает число с его правой стороны от него отрицательным. Только целые числа могут быть вычтены из дат. AppleScript интерпретирует такое целое число как много секунд. |
| Подразделение. Оператор двоичной арифметики, делящий число с его левой стороны от него числом с его правой стороны от него. |
| Интегральное подразделение. Оператор двоичной арифметики, делящий число с его левой стороны от него числом с его правой стороны от него и возвращающий неотъемлемую часть ответа как его результат. |
| Остаток. Оператор двоичной арифметики, делящий число с его левой стороны от него числом с его правой стороны от него и возвращающий остаток как его результат. |
| Возведение в степень. Оператор двоичной арифметики, увеличивающий число с его левой стороны от него к питанию числа с его правой стороны от него. |
| Приведение (или преобразование объекта). Бинарный оператор, преобразовывающий левый операнд в класс, перечисленный с его правой стороны от него. Не все значения могут быть принуждены ко всем классам. Приведения, которые может выполнить AppleScript, перечислены в Приведении (Преобразование объекта). Дополнительные приведения, если таковые имеются, что приложение может выполнить, перечислены в его словаре. Класс операндов: правый операнд должен быть идентификатором класса; левый операнд должен быть значением, которое может быть преобразовано в тот класс. Класс результата: класс указан идентификатором класса направо от оператора |
| Отрицание. Унарный логический оператор, приводящий к Класс операнда: |
| Ссылка на. Унарный оператор, заставляющий AppleScript возвращать a Посмотрите Класс операнда: любой тип класса |
При оценке выражений AppleScript использует приоритет оператора для определения, какие операции оценены сначала. В следующем выражении, например, AppleScript просто не выполняет операции слева направо — это выполняет работу умножения 2 * 5
во-первых, потому что умножение имеет более высокий приоритет, чем дополнение.
12 + 2 * 5 --result: 22 |
Таблица 9-2 показывает порядок, в котором AppleScript выполняет операции. Столбец маркировал «Ассоциативность», указывает порядок в случае, где существует два или больше операнда того же приоритета в выражении. Слово «None» в столбце Associativity указывает, что у Вас не может быть многократных последовательных случаев работы в выражении. Например, выражение 3 = 3 = 3
не законно, потому что ассоциативность для равного оператора не «ни один».
Для оценки выражений с многократными унарными операторами того же порядка AppleScript применяет оператора, самого близкого к операнду сначала, затем применяет следующего самого близкого оператора и т.д. Например, выражение not not not true
оценен как not (not (not true))
.
Можно осуществить порядок, в котором AppleScript выполняет операции путем группировки выражений в круглых скобках, оцененных сначала, начиная с самой внутренней пары круглых скобок.
Порядок | Операторы | Ассоциативность | Тип оператора |
---|---|---|---|
1 |
| Самый внутренний к наиболее удаленному | Группировка |
2 |
| Унарный | Плюс или знак «минус» для чисел |
3 |
| Справа налево | Возведение в степень (обратите внимание на то, что это отличается от стандартной математики, в которой возведение в степень имеет приоритет по унарному плюс или минус), |
4 |
| Слева направо | Умножение и разделение |
5 |
| Слева направо | Дополнение и вычитание |
6 |
| Слева направо | Связь |
7 |
| Слева направо | Приведение |
8 |
| Ни один | Сравнение |
9 |
| Ни один | Равенство и неравенство |
10 |
| Унарный | Логическое отрицание |
11 |
| Слева направо | Логичный и |
12 |
| Слева направо | Логичный или |
Следующие разделы обеспечивают дополнительную подробность о том, как AppleScript оценивает операторов в выражениях:
Оператор связи (&
) конкатенирует text
объекты, соединения record
объекты в запись и соединения другие объекты в список.
Таблица 9-1 суммирует использование использования этого оператора.
текст
Связь два text
объекты присоединяются к символам от левой руки text
возразите против символов от правой руки text
объект, без прошедших пробелов. Например, "dump" & "truck"
оценивает к text
объект "dumptruck"
.
Если левый операнд является a text
объект, но правый операнд не, AppleScript пытается принудить правый операнд к a text
объект. Например, когда AppleScript оценивает выражение "Route " & 66
это принуждает целое число 66
к text
объект "66"
, и результат text
объект "Route 66"
.
Однако Вы получаете различный результат при инвертировании порядка операндов:
66 & "Route " --result: {66, "Route "} (a list) |
В следующем примере левый операнд является a text
возразите и правый операнд является списком, таким образом, результаты связи в a text
объект:
item 1 of {"This"} & {"and", "that"} -- "Thisandthat" |
запись
Связь двух записей соединяет свойства левой записи на свойства правой записи. Если обе записи содержат свойства с тем же именем, значение свойства от левой записи появляется в результате. Например, результат выражения
{ name:"Matt", mileage:"8000" } & { name:"Steve", framesize:58 } |
{ name:"Matt", mileage:"8000", frameSize:58 } |
Все другие классы
За исключением случаев, описанных выше для text
объекты и record
объекты, оператор связи (&
) списки соединений. Операнд несписка считается списком, содержащим тот операнд. Следующий пример показывает связь двух целых чисел, списка и текстовой строки, и списка и записи, соответственно:
1 & 2 --result: {1, 2} |
{"this"} & "hello" --result: {"this", "hello"} |
{"this"} & {a:1, b:2} --result: {"this", 1, 2} |
Если оба, операнды, которые будут связаны, являются списками, то результатом является список, содержащий все элементы в левом списке, сопровождаемом всеми элементами в правом списке. Например:
{"This"} & {"and", "that"} --result: {"This", "and", "that"} |
{"This"} & item 1 of {"and", "that"} --result: {"This", "and"} |
Чтобы присоединиться к двум спискам и создать список списков, а не единственного списка, можно включить каждый список в два набора скобок:
{{1, 2}} & {{3, 4}} --result: {{1, 2}, {3, 4}} |
Для получения информации о работе эффективно с большими списками, посмотрите list
.
a reference to
оператор является унарным оператором, возвращающим a reference
объект. Можно сократить этого оператора до a ref to
, или ref to
, или даже просто ref
.
Для соответствующей информации посмотрите reference
класс и Объектные Спецификаторы.
Примеры
Следующее утверждение создает a reference
объект, содержащий объектный спецификатор к загрузочному диску Средства поиска:
tell app "Finder" to set diskRef to a ref to startup disk |
--result: startup disk of application "Finder" |
Следующее показывает, как получить ссылочный объект, относящийся к элементу в списке:
set itemRef to a reference to item 3 of {1, "hello", 755, 99} |
--result: item 3 of {1, "hello", 755, 99} |
set newTotal to itemRef + 45 --result: 800 |
В заключительной строке AppleScript автоматически разрешает объектный спецификатор, содержавшийся в ссылке itemRef
и получает его значение для использования в операции сложения. Заставить AppleScript явно разрешать a reference
объект, можно использовать contents
свойство:
contents of itemRef --result: 755 |
Следующие примеры демонстрируют, как использование ссылочного объекта может привести к различному результату, чем доступ к объекту непосредственно. Первый пример получает текущий отслеживаемый объект из iTunes, завоевывает репутацию, изменяет дорожку, затем завоевывает репутацию снова:
tell application "iTunes" |
set curTrack to current track |
--result: file track id 2703 of user playlist id 2425 |
-- of source id 46 of application "iTunes" |
display dialog (name of curTrack as string) -- "Shattered" |
next track -- play next song |
display dialog (name of curTrack as string) -- "Shattered" |
end tell |
Поскольку curTrack
определенное track
когда текущая дорожка изменяется, объект, его имя не изменяется. Но наблюдайте результат при использовании ссылки на текущую дорожку:
tell application "iTunes" |
set trackRef to a reference to current track |
--result: current track of application "iTunes" |
display dialog (name of trackRef as string) -- "Shattered" |
next track -- play next song |
display dialog (name of trackRef as string) -- "Strange Days" |
end tell |
Поскольку trackRef
a reference
когда текущая дорожка изменяется, объект, содержащий объектный спецификатор, спецификатор идентифицирует новую дорожку.
contains
и is contained by
операторы работают со списками, записями, и text
объекты.
Таблица 9-1 суммирует использование этих операторов и их синонимов.
список
Список contains
другой список, если правый список является подсписком левого списка. Подсписок является списком, элементы которого появляются в том же порядке и имеют те же значения как любая серия элементов в другом списке. Например, следующее утверждение true
потому что 1 + 1
оценивает к 2
, так, чтобы все элементы в правом списке появились, в том же порядке, в левом списке:
{ "this", "is", 1 + 1, "cool" } contains { "is", 2 } |
Следующее утверждение false
потому что элементы в правом списке не находятся в том же порядке как соответствующие элементы в левом списке:
{ "this", "is", 2, "cool" } contains { 2, "is" } |
Список is contained by
другой список, если левый список является подсписком правого списка. Например, следующее выражение true
:
{ "is", 2} is contained by { "this", "is", 2, "cool" } |
Оба contains
и is contained by
работайте, если подсписок является единственным значением — как с оператором связи (&
), единственные значения принуждены к спискам с одним элементом. Например, оба из следующих выражений оценивают к true
:
{ "this", "is", 2, "cool" } contains 2 |
2 is contained by { "this", "is", 2, "cool" } |
Однако следующие выражения, содержа вложенные списки, оба оценивают ко лжи:
{"this", "is", {2}, "cool"} contains 2 -- false |
{"this", "is", {2}, "cool"} contains {2} -- false |
запись
Запись содержит другую запись, если все свойства в правой записи включены в левую запись, и значения свойств в правой записи равны значениям соответствующих свойств в левой записи. Запись содержится другой записью, если все свойства в левой записи включены в правую запись, и значения свойств в левой записи равны значениям соответствующих свойств в правой записи. Порядок, в котором появляются свойства, не имеет значения. Например, следующее true
:
{ name:"Matt", mileage:"8000", description:"fast"} ¬ |
contains { description:"fast", name:"Matt" } |
текст
A text
объект содержит другого text
возразите если символы в правой руке text
объект равен любой непрерывной серии символов в левой руке text
объект. Например,
"operand" contains "era" |
true
, но
"operand" contains "dna" |
false
.
A text
объект содержится другим text
возразите если символы в левой руке text
объект равен любой серии символов в правой руке text
объект. Например, этот оператор true
:
"era" is contained by "operand" |
Текстовые сравнения могут быть затронуты considering
и ignoring
операторы, как описано в текстовом разделе equal, is not equal to
.
equal
и is not equal to
операторы могут обработать операнды любого класса. Два выражения различных классов обычно не равны, несмотря на то, что для скалярных операндов, таких как булевские переменные, целые числа и реалы, два операнда являются тем же, если у них есть то же значение.
Таблица 9-1 суммирует использование этих операторов и их синонимов.
список
Два списка равны, если они оба содержат то же число элементов и если значение элемента в одном списке идентично значению элемента в соответствующей позиции в другом списке:
{ 7, 23, "Hello" } = {7, 23, "Goodbye"} --result: false |
запись
Две записи равны, если они оба содержат тот же набор свойств и если значения свойств с той же меткой равны. Они не равны, если записи содержат различные наборы свойств, или если значения свойств с той же меткой не равны. Порядок, в котором перечислены свойства, не влияет на равенство. Например, следующее выражение true
:
{ name:"Matt", mileage:"8000" } = { mileage:"8000", name:"Matt"} |
текст
Два text
объекты равны, если они - оба та же серия символов. Они не равны, если они - различная серия символов. Для соответствующей информации посмотрите text
класс.
Текстовые сравнения могут быть затронуты considering
и ignoring
операторы, дающие AppleScript команду выборочно рассматривать или игнорировать атрибуты символов или типы символов. Например, если Вы не используете ignoring
оператор, AppleScript выдерживает сравнение text
объекты путем рассмотрения всех символов и пунктуации.
AppleScript не отличает верхний регистр от строчных букв, если Вы не используете a considering
оператор для рассмотрения case
атрибут. Например:
"DUMPtruck" is equal to "dumptruck" --result: true |
considering case |
"DUMPtruck" is equal to "dumptruck" --result: false |
end considering |
При сравнении два text
объекты, если тест не включается в a considering
или ignoring
оператор, тогда сравнение использует значения по умолчанию для рассмотрения и игнорирования атрибутов (описанный в considering / ignoring (text comparison)
).
greater than
и less than
операторы работают с датами, целыми числами, вещественными числами, и text
объекты.
Таблица 9-1 суммирует использование этих операторов и их синонимов.
дата
Дата больше, чем другая дата, если это представляет более позднее время. Дата является меньше, чем другая дата, если это представляет более раннее время.
целое число, реальное
Целое число или вещественное число больше, чем другое целое или вещественное число, если это представляет большее число. Это - меньше, чем другое целое или вещественное число, если это представляет меньшее число.
текст
Определить упорядочивание два text
объекты, AppleScript использует набор порядка сопоставления в области Language Международных предпочтений. A text
объект больше, чем (прибывает после), другой text
основанный на объектах на лексикографическом упорядочивании предпочтения языка пользователя. С предпочтительным набором английскому языку следующие два оператора оба оценивают к true
:
"zebra" comes after "aardvark" |
"zebra" > "aardvark" |
Следующие два оператора также оценивают к true
:
"aardvark" comes before "zebra" |
"aardvark" < "zebra" |
Текстовые сравнения могут быть затронуты considering
и ignoring
операторы, как описано в текстовом разделе equal, is not equal to
.
starts with
и ends with
операторы работают со списками и text
объекты.
Таблица 9-1 суммирует использование этих операторов и их синонимов.
список
Список starts with
элементы во втором списке, если все элементы во втором списке найдены в начале первого списка. Список ends with
элементы во втором списке, если все элементы во втором списке найдены в конце первого списка. Например, следующие три выражения - все true
:
{ "this", "is", 2, "cool" } ends with "cool" |
{ "this", "is", 2, "cool" } starts with "this" |
{ "this", "is", 2, "cool" } starts with { "this", "is" } |
текст
A text
объект starts with
текст за секунду text
возразите, найдены ли все символы во втором объекте в начале первого объекта. A text
объект ends with
текст за секунду text
возразите, найдены ли все символы во втором объекте в конце первого объекта. Например, следующее выражение true
:
"operand" starts with "opera" |
A text
возразите концам с другим text
возразите если символы в правой руке text
объект совпадает с символами в конце левой руки text
объект. Например, следующее выражение true
:
"operand" ends with "and" |
Текстовые сравнения могут быть затронуты considering
и ignoring
операторы, как описано в текстовом разделе equal, is not equal to
.