Re: Pacakges that need packages that need packages
- To: mathgroup at smc.vnet.net
- Subject: [mg37829] Re: Pacakges that need packages that need packages
- From: "Allan Hayes" <hay at haystack.demon.co.uk>
- Date: Thu, 14 Nov 2002 06:11:40 -0500 (EST)
- References: <aqqdp1$sfb$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Steven, If a symbol in your code comes from another package, say needed.m, then that package must be listed as a needed package in the first line of your code, thus: BeginPackage["mypacks`test`", "needed`", ....] It is not enough that it be a needed package of a package that you have listed in BeginPackag[...] (at least this is so unless you use "hidden" importation by Needs[..] in later lines). The problem is dealt with in Help>HelpBrowser>Add-ons>Standard Packages>Appendix: Basing New Packages on the Standard Mathematica PackagesPackages (thought this should be "on other packages"). Allan --------------------- Allan Hayes Mathematica Training and Consulting Leicester UK www.haystack.demon.co.uk hay at haystack.demon.co.uk Voice: +44 (0)116 271 4198 Fax: +44 (0)870 164 0565 "Steven T. Hatton" <hattons at globalsymmetry.com> wrote in message news:aqqdp1$sfb$1 at smc.vnet.net... > I'm trying to use a package I created from another package I'm writing. I'm > finding the context issues less than obvious. To give an example: > > I create 3 files: > TestPackage3.m > BeginPackage["GS`TestPackage3`","GS`TestPackage4`","CSM`Classes`"] > myFunction2::usage="myFunction2[message] echos message, and prints context \ > information." > myFunction3::usage="myFunction3[] echos myFunction3..., ." > myObj::usage="new[myObj,myParam] creates a new object" > myMethod::usage="myMethod[objName, string] prints string and myVar." > Begin["`Private`"] > myFunction2=Function[{message}, > Print[message]; > Print["$Packages: "<>$Packages]; > Print["$ContextPath: "<>$ContextPath]; > Print["Context[message]: "<>Context[message]]] > myFunction3=Function[{},myFunction["myFunction3..."]]; > > Class[myObj,Object,{myVar}, > { > {new,Function[{myParam}, > new[super]; > myVar=myParam]}, > {myMethod,Function[{myMessage}, > Print["My Message: "<> myMessage]; > Print["My Variable: "<>myVar] > ]}}] > $ContextPath > Print["$ContextPath from GS`TestPackage3`Private` "<>$ContextPath]; > End[] > EndPackage[] > > > > TestPackage4.m > > BeginPackage["GS`TestPackage4`", "CSM`Classes`"] > myFunction::usage = "myFunction[message] echos message, and prints context \ > information." > Begin["`Private`"] > myFunction = Function[{message}, > Print[message]; > Print["$Packages: " <> $Packages]; > Print["$ContextPath: " <> $ContextPath]; > Print["Context[message]: " <> $ContextPath]; > Print["Context[]: " <> $ContextPath] > ] > End[] > EndPackage[] > > > runTest.m > > AppendTo[$Path,ToFileName[ParentDirectory[]]] > Needs["CSM`Classes`"] > Needs["GS`TestPackage3`"] > Needs["GS`TestPackage4`"] > obj = new[myObj, "parameter name"] > $ContextPath > $Context > Names["Global`*"] > FullForm[obj] > mesg = "This is a message"; > myMethod[obj, mesg] > > > The only way I can make this work is to explicitly name CSM`Classes` in the > 'Needs' list of BeginPackage in TestPackage3. Note that it is in the 'Needs' > list of TestPackage4, and that is in the 'Needs' list of TestPackage3 > already. I also loaded it into my context before I did anything else. > > If I don't have CSM`Classes` explicitly listed in the BeginPackage of > TestPackage3, I get this for the context: > > $ContextPath from GS`TestPackage3`Private`\ > GS`TestPackage3`GS`TestPackage4`System` > > If it is present, I get this: > $ContextPath from GS`TestPackage3`Private`\ > GS`TestPackage3`GS`TestPackage4`CSM`Classes`System` > > > This seems like a method of adding new applications which will not scale very > nicely. Is there a better way to accomplish this? > -- > STH > Hatton's Law: > "There is only One inviolable Law." > >