Ссылочные формы

В этой главе описываются ссылочные формы AppleScript. Ссылочная форма указывает синтаксис для идентификации объекта или группы объектов в приложении или другом контейнере — т.е. синтаксис для построения объектного спецификатора (описанный в Объектных Спецификаторах).

Например, следующий объектный спецификатор (из сценария, предназначающегося для Средства поиска), использует несколько форм ссылки на указатель, идентифицирующих объект его числом в контейнере:

item 1 of second folder of disk 1
Произвольный

Указывает произвольный объект в контейнере. Эта форма полезна каждый раз, когда желаема случайность.

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

Синтаксис
some  class
Заполнители
класс

Класс для произвольного объекта.

Примеры

Следующее создает новое Сообщение электронной почты со случайной подписью (и зависит от пользователя, имеющего по крайней мере одну подпись):

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
Каждый

Указывает каждый объект определенного класса в контейнере.

Синтаксис
every  class 
pluralClass
Заполнители
класс

Исключительный класс (такой как 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  ( whose | where )  booleanTest 
Заполнители
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 показывает некоторые ссылки фильтра, булевы выражения, которые они содержат, и что тестируется в каждой ссылке.

Табличные 8-1  булевы выражения и тесты в ссылках фильтра

Ссылочная форма фильтра

Булево выражение

Что тестируется

windows whose zoomed is true

zoomed is true

zoomed свойство каждого окна

windows whose name isn’t "Hard Disk"

name isn’t "Hard Disk"

name свойство каждого окна

files whose creator type is "OMGR"

creator type is "OMGR"

creator type свойство каждого файла

Тест может быть любым булевым выражением. Можно соединить многократные тесты, как в следующем утверждении:

windows whose zoomed is true and floating is false
ID

Указывает объект значением id свойство.

Можно использовать ссылочную форму ID только с объектами приложения, имеющими свойство ID.

Синтаксис
class id  expression
Заполнители
выражение

Значение идентификатора.

Примеры

Следующие примеры используют ссылочную форму 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 [ index ] integer
integer (st | nd | rd | th ) class
( first | second | third | fourth | fifth | sixth | seventh | eighth | ninth | tenth ) class
( last | front | back ) 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 объект.

Середина

Указывает средний объект определенного класса в контейнере. Эта форма редко используется.

Синтаксис
middle  class 
Заполнители
класс

Класс среднего объекта получить.

Примеры
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  [ named ]  nameText 
Заполнители
класс

Класс для указанного объекта.

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).

Синтаксис
every  class  from  boundarySpecifier1  to  boundarySpecifier2 
pluralClass from boundarySpecifier1 to boundarySpecifier2
class startIndex ( thru | through ) stopIndex
pluralClass startIndex ( thru | through ) stopIndex
Заполнители
класс

Исключительный класс (такой как 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 ] ( before | [in] front of ) baseSpecifier
[ class ] ( after | [in] back of | behind ) baseSpecifier
Заполнители
класс

Идентификатор класса указанного объекта. При исключении этого параметра спецификатор относится к точке вставки.

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 сформируйтесь также работает.

Можно указать только отдельный объект с относительным спецификатором — объект, который является или прежде или после базового объекта.