Ответ 1
Существует два рекомендуемых способа загрузки пакета. Один из них - так называемый публичный импорт, и в вашей настройке он будет выполнен как
BeginPackage["package2`",{"package1`"}]
(* Usage messages etc *)
Begin["`Private`"]
(* code here *)
End[]
EndPackage[]
Здесь вы указываете имя контекста пакета, который хотите загрузить, в списке, который является вторым необязательным аргументом для BeginPackage
. Этот способ импорта называется public, потому что загруженный пакет останется на $ContextPath
после загрузки основного пакета и, таким образом, будет общедоступным.
Второй метод называется частным импортом и схематически выполняется как
BeginPackage["package2`"]
(* Usage messages etc *)
Begin["`Private`"]
Needs["package1`"]
(* code here *)
End[]
EndPackage[]
В этом методе загруженный второй пакет будет доступен только для пакета, который загружает его (с помощью Needs
), таким образом, частный импорт.
Какой путь вам нужен, будет зависеть от ситуации. Я стараюсь сделать все свои импорт частным, если я не должен сделать их общедоступными. Однако для отладки может быть полезно сначала сделать публичный импорт, так как тогда вы можете играть со вторым пакетом непосредственно на верхнем уровне.
Что касается безопасности, вы можете загрузить пакет любым количеством пакетов, и это будет безопасно. Когда вы одновременно загружаете несколько пакетов в один и тот же контекст, это будет безопасно, если эти пакеты не имеют общедоступных символов с таким же коротким именем. В противном случае вы столкнетесь с тем, что называется проблемой затенения, но лучше всего сделать все необходимое, чтобы избежать этого (это всегда возможно).