MathGroup Archive 2002

[Date Index] [Thread Index] [Author Index]

Search the Archive

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."



  • Prev by Date: RE: Re: How to use error message return values
  • Next by Date: Literate Programming (Was: Comments are KILLING me)
  • Previous by thread: Re: Multiline Text[ ] in figures: How to change alignmenty (justification)?
  • Next by thread: Re: Pacakges that need packages that need packages