@Limbend

Как создать пакет в WMathematica с приватными функциями?

Не могу разобраться с контекстными, при создании пакета. Необходимо создать пакет с перечнем функций. Внутри пакета нужны служебные функции. Для этого использую внутренний контекст. Begin[]; End[]

Однако при подключении пакета, функции пакета "не видят" внутренние функции. Попробовал использовать указатель контекста, это проблему не решило.

Однако когда подключаешь пакет повторно, все работает. В чем ошибка?

P.S. Набросал пример, для демонстрации проблемы. Прикладываю скрины файлов.
5a927d6a6f02f639893192.png5a927d6f37bdb317841635.png
  • Вопрос задан
  • 96 просмотров
Решения вопроса 1
youngmysteriouslight
@youngmysteriouslight
ТК, ТТ, JS, FP, WM
Один из способов решить проблему заключается в использовании относительного контекста: `Pr`pB[d]

Я обычно делаю так:
1. перед началом приватного контекста перечисляю все публичные символы (всё равно нужно usage и warnings прописать)
2. определения публичных символов делаю в том же блоке, где приватные, то есть до End[].
Из-за №1 публичные символы не захватываются контекстом, зато внутри приватного контекста можно его явно не писать.

Пример:
BeginPackage["P`"];
b::usage = "My b var";
Begin["`Pr`"];
a = 2;
b := a;
End[];
EndPackage[];

In[9]:= OwnValues[b]

Out[9]= {HoldPattern[b] :> P`Pr`a}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы