Re: Loading packages within packages
- To: mathgroup at smc.vnet.net
- Subject: [mg30264] Re: Loading packages within packages
- From: "Allan Hayes" <hay at haystack.demon.co.uk>
- Date: Sat, 4 Aug 2001 01:14:30 -0400 (EDT)
- References: <9kdbv0$f4u$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Oliver, I'm not getting the same as you, so let me say what I am doing and then deal with the problem of defaultA. I make two .m files in the directory AddOns\ExtraPackages (actually by creating a new text file and typing) The first, MyPackage.m, with text BeginPackage["MyPackage`",{"PackageA`"}] MyFunctionA::usage= "blablabla" Begin["`Private`"] MyFunctionA[a_:defaultA]:=ExternalFunctionA[a] End[] EndPackage[] The second, PackageA.m, with text BeginPackage["PackageA`"] ExternalFunctionA::usage= "blablabla" Begin["`Private`"] End[] EndPackage[] After <<MyPackage` MyFunctionA has been created as MyPackage`MyFunctionA defaultA has been created as MyPackage`Private`defaultA PackageA.m has been loaded ExternalFunctionA has been created as PackageA`ExternalFunctionA The current context is "Global`" and the current context path is {"MyPackage`","PackageA`","Global`","System`"} Now I get MyFunctionA[] ExternalFunctionA[MyPackage`Private`defaultA] Only the short form of ExternalFunctionA is displayed because PackageA`ExternalFunctionA the unique amongst those long names with an active context (equal to the current context or in the current context path). Since the context of MyPackage`Private`defaultA is not active it is displayed in full. We can deal with this by giving defaultA a usage message ( before Begin["`Private"]) in either of the packages. Here is what happens after I have added the usage message to MyPackage.m. <<MyPackage` MyFunctionA[] ExternalFunctionA[MyPackage`Private`defaultA] PROBLEM! How is this when MyPackage`defaultA has been created? The point is that the old long symbol MyPackage`Private`defaultA is still around from the earlier loading, and when default is found in MyPackage.m the current context is "MyPackage`Private` and so MyPackage`Private`defaultA used in preference to MyPackage`defaultA So, quit the kernel and start afresh Quit[] <<MyPackage` MyFunctionA[] ExternalFunctionA[defaultA] -- 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 "Oliver Friedrich" <oli.fri at gmx.de> wrote in message news:9kdbv0$f4u$1 at smc.vnet.net... > Hallo NG, > > I have some trouble with a self written package that reqires other packages. > It looks like this: > > BeginPackage["MyPackage`",{"PackageA`"}] > > MyFunctionA::usage= > "blablabla" > > Begin["`Private`"] > > MyFunctionA[a_:defaultA]:=ExternalFunctionA[a] > > End[] > > EndPackage[] > > Now my problems: > ExternalFunctionA is defined in PackageA`. When I load this package and use > MyFunctionA, the following happens: > > In:= > MyFunctionA[] > > Out:= > MyPackage`Private`ExternalFunctionA[MyPackage`Private`defaultA] > > 1. Why is ExternalFunctionA connected to MyPackage`Private` context and not > to PackageA` context? Of course, in this case ExternalFunctionA doesn't work > ! What am I doing wrong? > > 2. How can I supress the complete context of defaultA? When I call > MyFunctionA with the parameter it looks like this: > > In:= > MyFunctionA[parameter] > > Out:= > MyPackage`Private`ExternalFunctionA[parameter] > > 3. A more general question:What's the correct way to write *.m files, > especially how to save them correctly. The way I do seems to be a little bit > weird to me > > I have the Mathematica book, but this one is not explained thouroughly > enough. I'm running Version 3.0 ! > > Thanks for any suggestions > > Oliver Friedrich > > > >