Абсолютно вы можете сделать это, и есть два варианта . Первый загружает весь сценарий:
Script Foo.scpt
set theBar to "path:to:Bar.scpt" as alias
run script (theBar)
Script Bar.scpt
display dialog "Bar"
--Result: A window that displays "Bar"
Второй позволяет загружать сценарий и вызывать определенные методы внутри этого сценария:
Foo.scpt
property OopLib : load script POSIX file "/Users/philipr/Desktop/OopLib.app"
tell OopLib
set theResult to Oop(1)
display dialog theResult
end tell
--> result: Window displaying "Eek: 1"
OopLib. scpt
on Oop(Eek)
display dialog Eek
return "Eek: " & Eek
end Oop
В дополнение к сказанному на других плакатах, скрипт загрузки
- единственная встроенная опция; это очень примитивно, но может быть достаточно, если ваши потребности скромны.
Редактор Script Debugger Late Night Software предоставляет библиотечный механизм в стиле # include, который может объединять несколько файлов AppleScript при компиляции сценария. Обратной стороной Script Debugger является то, что его можно купить за пару сотен долларов, хотя многие обычные пользователи AppleScript скажут вам, что это того стоит.
Есть несколько сторонних загрузчиков модулей, Loader и ModuleLoader , которые реализуют более сложные механизмы импорта поверх основной команды load script
. , и стоит изучить, если ваши требования более сложные. Я не использовал ModuleLoader, но Loader (который я написал) может импортировать модули во время компиляции или выполнения из различных стандартных и указанных пользователем мест и автоматически разрешает сложные (даже циклические) зависимости между модулями.
Недостатками Loader и ModuleLoader является то, что они полагаются на дополнения к сценариям для выполнения тяжелой работы, что может быть проблемой при распространении сценариев (в случае Loader osax нужен только для компиляции сценариев, а не для их запуска. ), плюс вам нужно добавить в скрипт шаблонный код для выполнения фактического импорта.
Используйте что-то вроде этого для загрузки скрипта
set scriptLibraryPath to (path to scripts folder from user domain as text) & "myScript.scpt"
set scriptLibrary to load script scriptLibraryPath as alias
Затем для доступа к подпрограмме в этом скрипте сделайте следующее...
set myValue to someMethod() of scriptLibrary