Re: Share symbols among packages
- To: mathgroup at smc.vnet.net
- Subject: [mg97379] Re: Share symbols among packages
- From: David Bailey <dave at removedbailey.co.uk>
- Date: Thu, 12 Mar 2009 02:18:07 -0500 (EST)
- References: <gp82if$2l4$1@smc.vnet.net>
Andrey wrote: > Hello group, > > How to use Global symbols in several user packages? > > That is, I have: > > BeginPackage["MyPack1`"] > > myVar::usage="My var"; > > myFun1::usage="My fun1"; > > Begin["`Private`"]; > ... > (* use myVar *) > ... > End[] > EndPackage[] > > BeginPackage["MyPack2`"] > > myVar::usage="My var"; > > myFun2::usage="My fun2"; > > Begin["`Private`"]; > ... > (* use myVar *) > ... > End[] > EndPackage[] > > And then I would like to do like this: > > myVar=data; myFun1[a,b,c] > myVar=data; myFun2[a,b,c] > > The problem is: > > myVar::shdw: "Symbol myVar appears in multiple contexts \!\({\"MyPack1` > \", \"MyPack2`\"}\); definitions in context \!\(\"MyPack2`\"\) may > shadow or be shadowed by other definitions." > > Any ideas? > > > Regards, > > -Andrey > You have not been totally clear as to whether these are your packages - which you can alter. If they are, the simplest solution is to name the exported symbols differently in the two packages! However, you can access any symbol - even a 'Private' symbol - by using its full name. Thus MyPack1 could access MyPack2`Private`privatefunc2 just by using the fully specifies name. This function could also be accessed from the Global` context in the same way. This can often be useful while debugging a package - because you can actually view variables that are internal to the package. I am not sure if this answers your question! David Bailey http://www.dbaileyconsultancy.co.uk