Pacakges that need packages that need packages
- To: mathgroup at smc.vnet.net
- Subject: [mg37771] Pacakges that need packages that need packages
- From: "Steven T. Hatton" <hattons at globalsymmetry.com>
- Date: Tue, 12 Nov 2002 03:13:30 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
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."