#wolfram-mathematica #packages
#wolfram-mathematica #пакет
Вопрос:
Я создаю пакет приложений в Mathematica. Приложение содержит несколько пакетов и ссылается на другие пакеты приложений
Чтобы все настроить, я использовал инструкции по пакетам приложений из раздела справки workbench, который также доступен по адресу:http://reference .wolfram.com/workbench/index.jsp?topic=/com.wolfram.eclipse.help/html/tasks/applications/introduction.html в разделе Пакеты и приложения, но…
- Я внедрил и протестировал пакеты приложений с одним пакетом, и, похоже, все они работают нормально.
- В данный момент мои многочисленные пакеты и приложение работают некорректно из-за следующих выявленных проблем: а) основной пакет приложения вызывает функции, реализованные в дополнительных пакетах, но эти функции, похоже, там не распознаются. Я пытался даже явно вызвать их в основном пакете, используя команду Needs в начале пакета, но безрезультатно. *Что я делаю не так?* Все дополнительные пакеты находятся в папке приложения, как указано в справке. Более конкретно:
Основной пакет и приложение называются OptMainFuncAll, поэтому основной пакет OptMainFuncAll.m начинается с
BeginPackage["OptMainFuncAll`"]
Дополнительные пакеты IntermFunct.m и VolCandExt.m начинаются с:
BeginPackage[ "OptMainFuncAll`IntermFunct`"]
BeginPackage[ "QuadOptMainFuncAll`VolCandExt`"]
Однако функции, определенные в IntermFunct.m и VolCandExt.m, неизвестны при вызове в OptMainFuncAll.m — Что я делаю не так?
Я даже пытался явно объявить
Needs[ "OptMainFuncAll`IntermFunct`"]
Needs[ "QuadOptMainFuncAll`VolCandExt`"]
в начале OptMainFuncAll.m и это не решило мою проблему
Кроме того, я сделал ссылку на второй пакет приложений (BasicSym ), и workbench показывает его как ссылочный, но его функции также кажутся неизвестными в OptMainFuncAll.m .
Я также пытался запустить OptMainFuncAll.m с
BeginPackage[{OptMainFuncAll`, BasicSym`}]
и это не сработало; консоль во время выполнения возвращает сообщение:
BeginPackage::cxt: недопустимый контекст, указанный в позиции 1 в BeginPackage[{OptMainFuncAll
,
}]. Контекст должен состоять из допустимых имен символов, разделенных символом ` и заканчивающихся на ‘. Конечный пакет::noctx: предыдущий контекст не определен.
BasicSym
Я уверен, что совершаю какую-то глупую ошибку разработчика пакетов приложений, но, похоже, я не могу приложить к этому руку.
Я был бы очень признателен, если бы вы могли просто сообщить мне точные объявления пакетов в BeginPackage [?] для основного пакета, дополнительных пакетов и пакетов, на которые даны ссылки, с именами, которые я привел здесь, чтобы все работало гладко.
Ответ №1:
Пожалуйста, попробуйте:
BeginPackage["OptMainFuncAll`",
{"BasicSym`",
"OptMainFuncAll`IntermFunct`",
"QuadOptMainFuncAll`VolCandExt`"}
]
Первым аргументом является текущее имя пакета, в то время как второй аргумент представляет собой список имен пакетов (контекстов), от которых это будет зависеть.