Создание пакетов приложений с использованием нескольких пакетов и ссылок в Mathematica

#wolfram-mathematica #packages

#wolfram-mathematica #пакет

Вопрос:

Я создаю пакет приложений в Mathematica. Приложение содержит несколько пакетов и ссылается на другие пакеты приложений

Чтобы все настроить, я использовал инструкции по пакетам приложений из раздела справки workbench, который также доступен по адресу:http://reference .wolfram.com/workbench/index.jsp?topic=/com.wolfram.eclipse.help/html/tasks/applications/introduction.html в разделе Пакеты и приложения, но…

  1. Я внедрил и протестировал пакеты приложений с одним пакетом, и, похоже, все они работают нормально.
  2. В данный момент мои многочисленные пакеты и приложение работают некорректно из-за следующих выявленных проблем: а) основной пакет приложения вызывает функции, реализованные в дополнительных пакетах, но эти функции, похоже, там не распознаются. Я пытался даже явно вызвать их в основном пакете, используя команду 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 ,
BasicSym
}]. Контекст должен состоять из допустимых имен символов, разделенных символом ` и заканчивающихся на ‘. Конечный пакет::noctx: предыдущий контекст не определен.

Я уверен, что совершаю какую-то глупую ошибку разработчика пакетов приложений, но, похоже, я не могу приложить к этому руку.

Я был бы очень признателен, если бы вы могли просто сообщить мне точные объявления пакетов в BeginPackage [?] для основного пакета, дополнительных пакетов и пакетов, на которые даны ссылки, с именами, которые я привел здесь, чтобы все работало гладко.

Ответ №1:

Пожалуйста, попробуйте:

 BeginPackage["OptMainFuncAll`",
      {"BasicSym`",
       "OptMainFuncAll`IntermFunct`",
       "QuadOptMainFuncAll`VolCandExt`"}
]
  

Первым аргументом является текущее имя пакета, в то время как второй аргумент представляет собой список имен пакетов (контекстов), от которых это будет зависеть.