Re: Packages with Cyclic Dependencies
- To: mathgroup at smc.vnet.net
- Subject: [mg63243] Re: [mg63219] Packages with Cyclic Dependencies
- From: "David Annetts" <davidannetts at aapt.net.au>
- Date: Tue, 20 Dec 2005 04:19:44 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
Hi Catarina,
> Using Mathematica 5.1.
> I have two packages, let's call them A and B and they both
> need each other, something like:
> A.m:
> BeginPackage["A`"]
> Needs["B`"]
>
> ...
>
> EndPackage[]
>
> B.m:
> BeginPackage["B`"]
> Needs["A`"]
>
> ...
>
> EndPackage[]
>
> Can I have this kind of cyclic package dependency?
> Now, my current package design is, I write the packages in a
> notebook and mathematica seems to create the .m
> automagically. Should this be this way? I never get to touch the .m?
You can do this if you want, but if the two packages are so inter-twinned,
why not just put them both ni a single package? In any case ...
Save this to one of the directories in your $Path (eg. $UserBaseDirectory <>
"/Applications") as ftna.nb
BeginPackage["ftna`", {"ftnb`"}]
ftna::usage = "ftna ...";
Begin["Private`"]
ftna[] := Print["Hi from ftn A"];
End[]
EndPackage[]
Now save this to ftnb.nb in the same directory.
BeginPackage["ftnb`", {"ftna`"}]
ftnb::usage = "ftnb ...";
Begin["Private`"]
ftnb[] := Print["Hi from ftn B"];
End[]
EndPackage[]
You can test that either package loads the other using the code below, which
should be saved to test.nb
Notebook[{
Cell[BoxData[{
\(Off[General::spell, \ General::spell1]\), "\n",
\(Needs["\<ftna`\>"]\), "\n",
\(ftna[]\), "\n",
\(ftnb[]\)}], "Input"],
Cell[BoxData[
\(Quit[]\)], "Input"],
Cell[BoxData[{
\(Off[General::spell, \
General::spell1]\), "\[IndentingNewLine]",
\(Needs["\<ftnb`\>"]\), "\n",
\(ftnb[]\), "\n",
\(ftna[]\)}], "Input"]
},
FrontEndVersion->"5.2 for Microsoft Windows",
ScreenRectangle->{{0, 1400}, {0, 974}},
WindowSize->{496, 740},
WindowMargins->{{448, Automatic}, {103, Automatic}}
]
It _is_ this way. See a thread on this mailing list from a few weeks ago on
the merits of developing under the notebook interface verses developing
using an ASCII editor.
Regards,
Dave.