AppleScript: ошибка «use framework» в «ожидаемом конце строки и т. Д., Но найден идентификатор». - PullRequest
0 голосов
/ 14 октября 2018

У меня есть следующий фрагмент AppleScript.

use framework "Foundation"
display dialog "foo"

Примечание: платформа Foundation на самом деле не используется в этом примере, потому что эта часть кода не имеет значения для этого примера.Один этот код уже выдает ошибку.В реальной жизни мы, очевидно, импортируем только фреймворк, чтобы использовать его, duh: -)

Когда я запускаю это, я получаю бесполезную ошибку:

Expected end of line, etc. but found identifier. 

Идентификатор, на котором скрипт MacOSРедактор останавливается в «диалоге».

Когда я изменяю код на:

display dialog "foo"

Сценарий запускается так, как я этого ожидаю.

У меня два вопроса:

  1. Почему верхний пример выдает ошибку?
  2. Почему он выдает именно эту ошибку?Или другими словами: почему эта ошибка так бесполезна?Это относится к AppleScript в целом?

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Предикация в вашем ответе устарела.В настоящее время вы можете импортировать фреймворки в стандартные скрипты (AFAIR начиная с Yosemite).

Если вы применяете оператор use framework, вам нужно добавить

use scripting additions

, чтобы иметь доступ к display dialog

0 голосов
/ 14 октября 2018

!Информация, на которой я основывал свой ответ, была устаревшей, см. Мой ответ об обновлении.


Причина, по которой ошибки сценария заключаются в следующем:

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

Итак, в принципе: вам не разрешено использовать useутверждение в обычном скрипте AppleScript.Вы можете только использовать его в библиотеках сценариев.

Чтобы исправить это, мы создаем «библиотеку сценариев», которая является просто еще одним файлом AppleScript.Допустим, мы называем эту библиотеку сценариев chewbacca.scpt.Вам нужно разместить скрипт в определенном месте на вашем Mac.(У вас есть несколько вариантов для этого местоположения).AppleScript только ищет в этих местах при попытке импортировать библиотеки скриптов.

Затем, чтобы использовать библиотеку скриптов, сделайте что-то вроде:

tell script "chewbacca"
  display dialog "foo"
end tell

Это должно дать желаемый результат.


Обновление :

После прочтения некоторых ответов и прочтения дополнительной документации:

Расширение AppleScript путем импорта библиотеки вызывает эти библиотекиosax (или «Добавление сценариев»), потому что их имена заканчиваются на .osax.OSAX расшифровывается как «Open Scripting Architecture eXtension».Чтобы импортировать осакс, мы пишем use library в нашем скрипте (я не уверен на 100% в этом).Импортируя osax, мы можем использовать команды в этом osax.

AppleScript (язык) не имеет команд для таких вещей, как: диалоги взаимодействия с пользователем (display dialog), чтение и запись файлов, команды файловой системы,функции даты, текстовые и математические операции.

Но: Apple предоставляет осакс, который предлагает следующие команды: StandardAdditions.osax, нетрудно понять, почему это один из наиболее часто используемых осах.

Чтобы импортировать этот осакс:

use scripting additions

Теперь вернемся к моему вопросу:

Я вижу, что AppleScript ведет себя по-разному при определенных условиях:

  1. скрипт делаетне импортировать osax
  2. скрипт импортирует osax (но не StandardAdditions.osax)

В ситуации 1 кажется, что AppleScript (среда выполнения?) автоматически импортирует StandardAdditions.osax,Я думаю, что это так, потому что я могу использовать display dialog.

В ситуации 2 AppleScript (среда выполнения) не импортирует автоматически StandardAdditions.osax.

Я могу теоретизировать об этом другом поведении:

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

Мышлениеза ситуацией 2 могло быть что-то вроде: «разработчик явно импортирует осакс, поэтому им может не потребоваться StandardAdditions.osax, поэтому давайте не будем импортировать его автоматически».

Я нашел где-то, что этохорошая идея всегда явно импортировать StandardAdditions.osax, добавив use scripting additions в ваш скрипт.Я последую этому совету в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...