Ссылочные формы
В этой главе описываются ссылочные формы AppleScript. Ссылочная форма указывает синтаксис для идентификации объекта или группы объектов в приложении или другом контейнере — т.е. синтаксис для построения объектного спецификатора (описанный в Объектных Спецификаторах).
Например, следующий объектный спецификатор (из сценария, предназначающегося для Средства поиска), использует несколько форм ссылки на указатель, идентифицирующих объект его числом в контейнере:
item 1 of second folder of disk 1 |
Указывает произвольный объект в контейнере. Эта форма полезна каждый раз, когда желаема случайность.
Поскольку произвольный элемент по его характеру, случайному, эта форма не полезна для операций, таких как обработка каждого элемента в группе файлов, слов или других объектов.
Синтаксис
|
Заполнители
- класс
Класс для произвольного объекта.
Примеры
Следующее создает новое Сообщение электронной почты со случайной подписью (и зависит от пользователя, имеющего по крайней мере одну подпись):
tell application "Mail" |
activate |
set randomSignature to some signature |
set newMessage to make new outgoing message ¬ |
at end of outgoing messages with properties ¬ |
{subject:"Guess who?", content:"Welcome aboard.", visible:true} |
set message signature of newMessage to randomSignature |
end tell |
Следующий просто получает случайное слово из документа TextEdit:
tell application "TextEdit" |
some word of document 1 -- any word from the first document |
end tell |
Указывает каждый объект определенного класса в контейнере.
Синтаксис
|
Заполнители
- класс
-
Исключительный класс (такой как
word
илиparagraph
). - pluralClass
-
Форма множественного числа для класса (такой как
words
илиparagraphs
).
Значение
Значение every
объектный спецификатор является списком объектов от контейнера. Если контейнер не содержит объектов указанного класса, список является пустым списком: {}. Например, значение выражения every word of {1, 2, 3}
пустой список {}
.
Примеры
Следующий пример использует every
объектный спецификатор для указания каждого слова, содержавшегося в текстовой строке:
set myText to "That's all, folks" |
every word of myText --result: {"That's", "all", "folks"} (a list of three words) |
Следующий объектный спецификатор указывает тот же список:
words of myText |
Следующий пример указывает список всех элементов в папке Users загрузочного диска (раздел начальной загрузки):
tell application "Finder" |
every item of folder "Users" of startup disk |
end tell |
Следующее указывает тот же список как предыдущий пример:
tell application "Finder" |
items of folder "Users" of startup disk |
end tell |
Обсуждение
Использование every
ссылочная форма подразумевает существование index
свойство для указанных объектов.
Если Вы указываете every
объектный спецификатор как контейнер, из которого можно получить свойство или объект, результат, является списком, содержащим указанное свойство или объект для каждого объекта контейнера. Число элементов в списке совпадает с числом объектов в контейнере.
Указывает все объекты в контейнере, соответствующие условие или тест, указанный булевым выражением.
Форма фильтра указывает объекты приложения только. Это не может использоваться для фильтрации объектов AppleScript list
, record
, или text
. Срок, использующий форму фильтра, также известен как a whose
пункт.
Ссылочная форма фильтра может часто заменяться a repeat
оператор, или наоборот. Например, следующий сценарий закрывает каждое окно TextEdit, которое не называют "Old Report.rtf"
:
tell application "TextEdit" |
close every window whose name is not "Old Report.rtf" |
end tell |
Вы могли вместо этого получить список, открывают окна и устанавливают a repeat
оператор, проверяющий имя каждого окна и закрывающий окно, если это не называют "Old Report.rtf"
. Однако a whose
пункт часто является самым быстрым способом получить желаемую информацию.
Следующее является сокращенной формой предыдущего сценария:
windows of application "TextEdit" whose name is not "Old Report.rtf" |
Для соответствующей информации посмотрите повторные Операторы.
Синтаксис
objectSpecifier |
Заполнители
- objectSpecifier
-
Указывает контейнер, в котором можно искать объекты, соответствующие булев тест.
whose
|where
-
Эти слова имеют то же значение и относятся ко всем объектам в указанном контейнере, соответствующим условия в указанном булевом выражении.
- booleanTest
-
Любое булево выражение (см.
boolean
определение класса).
Значение
Значение ссылочной формы фильтра является списком объектов, проходящих тест. Если никакие объекты не проходят тест, список является пустым списком: {}.
Примеры
Следующий пример показывает объектный спецификатор для всех открытых окон Finder, не имеющих имени "AppleScript Language Guide"
.
tell application "Finder" |
every window whose name is not "AppleScript Language Guide" |
end tell |
Обсуждение
В действительности фильтр сокращает количество объектов в контейнере. Вместо указания every
Окно Finder, следующий объектный спецификатор указывает просто окна, в настоящее время масштабирующиеся:
every window whose zoomed is true |
Для указания контейнера после фильтра необходимо включить фильтр и объектный спецификатор, которому это применяется к в круглых скобках, как в этом примере:
tell application "Finder" |
(files whose file type is not "APPL") in folder "HD:SomeFolder:" |
end tell |
В тесте в ссылке фильтра прямое дополнение является протестированным объектом. Хотя это не обычно необходимо, эта неявная цель может быть указана явно с помощью ключевого слова it
, который описан в этом и мне Ключевые слова.
Следующий пример показывает несколько эквивалентных способов создать ссылку фильтра для нахождения всех файлов в папке этим, имя которого содержит слово «AppleScript». В то время как срок it
обращается к приложению Средства поиска за пределами операторов фильтра, в них of it
относится к текущему протестированному файлу. Результат каждого теста фильтра является тем же и не изменяется включением или исключением срока of it
:
tell application "Finder" |
it --result: application "Finder" (target of tell statement) |
set myFolder to path to home folder |
--result: alias "Leopard:Users:myUser:" |
files in myFolder --result: a list of Finder document files |
files in myFolder where name of it contains "AppleScript" |
(* result: document file "AppleScriptLG.pdf" of folder "myUser" |
of folder "Users" of startup disk of application "Finder"}*) |
files in myFolder where name contains "AppleScript" -- same result |
every file in myFolder whose name contains "AppleScript" -- same result |
every file in myFolder where name of it contains "AppleScript" |
-- same result |
end tell |
Ссылочная форма фильтра включает один или несколько тестов. Каждый тест является булевым выражением, сравнивающим свойство или элемент каждого объекта, протестированного или самих объектов, с другим объектом или значением. Таблица 8-1 показывает некоторые ссылки фильтра, булевы выражения, которые они содержат, и что тестируется в каждой ссылке.
Ссылочная форма фильтра | Булево выражение | Что тестируется |
---|---|---|
|
| |
|
| |
|
| |
Тест может быть любым булевым выражением. Можно соединить многократные тесты, как в следующем утверждении:
windows whose zoomed is true and floating is false |
Указывает объект значением id
свойство.
Можно использовать ссылочную форму ID только с объектами приложения, имеющими свойство ID.
Синтаксис
class |
Заполнители
- выражение
-
Значение идентификатора.
Примеры
Следующие примеры используют ссылочную форму ID для указания application
ID и a disk
объект ID.
tell application id "com.apple.finder" |
-- specifies an application (Finder) by its ID |
disk id -100 -- specifies a Finder disk object by ID |
name of disk id -100 --result: "Leopard_GM" (gets name from ID specifier) |
end tell |
Обсуждение
Использование id
ссылочная форма подразумевает существование a id
свойство для указанных объектов.
Несмотря на то, что id
свойства являются чаще всего целыми числами, id
свойство может принадлежать любому классу. Поддерживающее приложение id
свойства для его scriptable объектов должны гарантировать, что IDs уникален в контейнере. Некоторые приложения могут также предоставить дополнительные гарантии, такие как обеспечение уникальности ID среди всех объектов.
Значение id
свойство не является обычно модифицируемым. Даже если объект перемещен в контейнере, это не изменяется. Это позволяет Вам сохранять ID объекта и использовать его для обращения к объекту столько, сколько существует объект. В некоторых сценариях можно хотеть обратиться к объекту его ID, а не свойством, таким как его имя, которое может измениться. Точно так же Вы могли отслеживать элемент его индексом, но индексы могут измениться, когда элементы в контейнере добавлены, удалены, или даже переименованы.
Запускаясь в AppleScript 2.0, объектах класса application
имейте id
свойство, представляющее идентификатор пакета приложения (значение по умолчанию) или его код подписи с четырьмя символами.
Также запускаясь в AppleScript 2.0, объектах класса text
имейте id
свойство, представляя кодовую точку Unicode или точки для символа или символов в объекте. Поскольку a text
ID объекта основывается на символах, которые это содержит, этот IDs, как гарантируют, не будет уникален, и фактически будет идентичен для два text
объекты, хранящие те же символы. И фактически, нет никакого способа сказать два таких объекта независимо проверкой.
Указывает объект путем описания его позиции относительно начала или конца контейнера.
Для соответствующей информации посмотрите Относительный.
Синтаксис
class |
Заполнители
- класс
-
Класс индексируемого объекта получить.
- целое число
-
Целое число, описывающее позицию объекта в связи с началом контейнера (если целое число является положительным целым числом) или конец контейнера (если целое число является отрицательным целым числом).
st
|nd
|rd
|th
-
Добавленный к надлежащему целому числу для формирования индекса. Например,
1st
,2nd
,3rd
. first
|second
|third
|fourth
|fifth
|sixth
|seventh
|eighth
|ninth
|tenth
-
Укажите один из порядковых индексов.
Формы
first
,second
, и т.д. эквивалентны соответствующим целочисленным формам (например,second word
эквивалентно2nd word
). Для объектов, индекс которых больше, чем 10, можно использовать формы12th
,23rd
,101st
, и т.д. (Обратите внимание на то, что любое целое число, сопровождаемое любым из перечисленных суффиксов, допустимо; например, можно использовать11rd
относиться к одиннадцатому объекту.) last
|front
|back
front
форма (например,front window
) эквивалентно классу 1 (window 1
) или первый класс (first window
).last
иback
формы (например,last word
иback window
) обратитесь к последнему объекту в контейнере. Они эквивалентны классу-1 (например,window -1
).
Примеры
Каждый из следующих объектных спецификаторов указывает первый элемент на загрузочном диске:
item 1 of the startup disk |
item index 1 of the startup disk -- "index" is usually omitted |
the first item of the startup disk |
Следующие объектные спецификаторы указывают второе слово с начала третьего абзаца:
word 2 of paragraph 3 |
2nd word of paragraph 3 |
second word of paragraph 3 |
Следующие объектные спецификаторы указывают последнее слово в третьем абзаце:
word –1 of paragraph 3 |
last word of paragraph 3 |
Следующие объектные спецификаторы указывают предпоследнее слово в третьем абзаце.
word –2 of paragraph 3 |
-2th word of paragraph 3 |
Обсуждение
Индексы энергозависимы. Изменение некоторого другого свойства объекта может изменить свой индекс, а также индекс другого как объекты. Например, после удаления word 4
из абзаца больше не существует слово. Но может все еще быть a word 4
— слово, которое было раньше word 5
. После word 4
удален, любые слова с индексом выше, чем 4 будут также иметь новый индекс. Таким образом, объект, который указывает индекс, может измениться.
Для уникального спецификатора постоянного объекта можно использовать id
ссылочная форма (см. ID), если поддержка приложений она для класса объекта Вы работаете с. И для того, чтобы отслеживать файл, можно использовать alias
объект.
Указывает средний объект определенного класса в контейнере. Эта форма редко используется.
Синтаксис
|
Заполнители
- класс
Класс среднего объекта получить.
Примеры
tell application "TextEdit" |
middle paragraph of front document |
end tell |
middle item of {1, "doughnut", 33} --result: "doughnut" |
middle item of {1, "doughnut", 22, 33} --result: "doughnut" |
middle item of {1, "doughnut", 11, 22, 33} --result: 11 |
Обсуждение
middle
ссылочная форма обычно работает только когда index
сформируйтесь также работает.
AppleScript вычисляет средний объект путем взятия половины количества, затем окружая. Например, среднее слово абзаца, содержащего десять слов, является пятым словом; середина одиннадцати слов является шестой.
Синтаксис
class |
Заполнители
- класс
-
Класс для указанного объекта.
- nameText
-
Значение свойства имени объекта.
Примеры
Следующие утверждения идентифицируют объекты по имени:
document "Report.rtf" |
window named "logs" |
Обсуждение
Использование name
ссылочная форма подразумевает существование a name
свойство для указанных объектов.
В некоторых приложениях возможно иметь многократные объекты того же класса в том же контейнере с тем же именем. Например, если существует два диска под названием «Жесткий диск», следующее утверждение неоднозначно (по крайней мере, читателю):
tell application "Finder" |
item 1 of disk "Hard Disk" |
end tell |
В таких случаях, именно до приложения для определения объекта указан a name
ссылка.
Синтаксис
propertyLabel |
Заполнители
- propertyLabel
-
Метка для свойства.
Примеры
Следующим примером является объектный спецификатор к свойству окна Finder. Это перечисляет метку для свойства окна (zoomed
) и его контейнер (front window
). zoomed
булево свойство.
zoomed of front window -- e.g., false, if the window isn't zoomed |
Для многих объектов можно получить список свойств:
tell app "Finder" |
properties of window 1 --result: a list of properties and their values |
end tell |
Следующим примером является объектный спецификатор к UnitPrice
свойство a record
объект. Метка свойства UnitPrice
и контейнер record
объект.
UnitPrice of {Product:"Super Snack", UnitPrice:0.85, Quantity:10} --result: 0.85 |
Обсуждение
Метки свойства перечислены в определениях классов в словарях приложения. Поскольку метка свойства уникальна среди свойств объекта, метка - все, что необходимо указать свойство — нет никакой потребности указать класс свойства.
Указывает серию объектов того же класса в том же контейнере. Можно указать объекты с парой индексов (такой как words 12 thru 24
) или с парой граничных объектов (integers from integer 1 to integer 3
).
Синтаксис
Заполнители
- класс
-
Исключительный класс (такой как
window
илиword
). - pluralClass
-
Множественный класс (такой как
windows
илиwords
). - boundarySpecifier1 и boundarySpecifier2
-
Спецификаторы к объектам, связавшим диапазон. Диапазон включает граничные объекты. Можно использовать зарезервированное слово
beginning
вместо boundarySpecifier1 для указания позиции перед первым объектом контейнера. Точно так же можно использовать зарезервированное словоend
вместо boundarySpecifier2 для указания позиции после последнего объекта в контейнере. - startIndex и stopIndex
-
Индексы первого и последнего объекта диапазона (такой как
1
и10
вwords 1 thru 10
).Хотя целочисленные индексы являются наиболее распространенным классом, запуск и индексы остановки могут иметь любой класс. Приложение определяет, какие индексные классы значимы для него.
Значение
Значение формы ссылки на диапазон является списком объектов в диапазоне. Если указанный контейнер не содержит объекты указанного класса, или если диапазон выходит за пределы, ошибка возвращается. Например, следующий спецификатор диапазона приводит к ошибке, потому что нет никаких слов в списке:
words 1 thru 3 of {1, 2, 3} --result: an error |
Примеры
Следующий пример показывает граничную объектную форму спецификатора диапазона. При компиляции этого оператора Редактор сценариев преобразовывает from integer 1 to integer 2
к форме integers 1 thru 2
.
set intList to integers from integer 1 to integer 2 of {17, 33, 24} |
--result: {17, 33} |
В следующем примере, фразе folders 3 thru 4
спецификатор диапазона, указывающий список двух папок в контейнере startup disk
:
tell application "Finder" |
folders 3 thru 4 of startup disk |
end tell |
--result: a list of folders (depends on contents of startup disk) |
Обсуждение
Если Вы указываете спецификатор диапазона как контейнер для свойства или объекта, как в
name of folders 2 thru 3 of startup disk |
результатом является список, содержащий указанное свойство или объект для каждого объекта контейнера. Число элементов в списке совпадает с числом объектов в контейнере.
Получить непрерывную серию символов — вместо списка — от a text
объект, используйте text
класс:
text from word 1 to word 4 of "We're all in this together" |
--result: "We're all in this" |
words 1 thru 4 of "We're all in this together" |
--result: {"We're", "all", "in", "this"} |
Указывает объект или точку вставки в контейнере путем описания позиции в связи с другим объектом, известным как основа, в том же контейнере.
Синтаксис
[ class ] ( |
Заполнители
- класс
-
Идентификатор класса указанного объекта. При исключении этого параметра спецификатор относится к точке вставки.
- baseSpecifier
-
Спецификатор для объекта.
before
|[in] front of
-
Эти формы эквивалентны, и относятся к объекту, сразу предшествующему базовому объекту.
after
|[in] back of
|behind
-
Эти формы эквивалентны, и сразу относятся к объекту после основы.
beginning | front
-
Эти формы эквивалентны, и относятся к первой точке вставки контейнера (
insertion point 1
). end | back
-
Эти формы эквивалентны, и относятся к последней точке вставки контейнера (
insertion point -1
).Несмотря на то, что условия такой как
beginning
иend
походите на абсолютные позиции, они относительно существующего содержания контейнера (т.е. прежде или после существующего содержания).
Примеры
Два относительных спецификатора в следующем tell
блок указывает тот же файл путем идентификации его позиции относительно другого файла на диске:
tell application "Finder" |
item before item 3 of startup disk --result: e.g., a specifier |
item after item 1 of startup disk --result: e.g., a specifier |
end tell |
Следующий пример показывает, как использовать различные относительные спецификаторы, одним словом, обрабатывающие документ:
tell first document of application "TextEdit" |
copy word 1 to before paragraph 3 |
copy word 3 to in back of paragraph 4 |
copy word 1 of the last paragraph to behind the third paragraph |
end tell |
Обсуждение
relative
ссылочная форма обычно работает только когда index
сформируйтесь также работает.
Можно указать только отдельный объект с относительным спецификатором — объект, который является или прежде или после базового объекта.