Re: shadow warning with function parameters and local
- To: mathgroup at smc.vnet.net
- Subject: [mg105024] Re: [mg104994] shadow warning with function parameters and local
- From: DrMajorBob <btreat1 at austin.rr.com>
- Date: Wed, 18 Nov 2009 06:58:48 -0500 (EST)
- References: <200911171013.FAA17202@smc.vnet.net>
- Reply-to: drmajorbob at yahoo.com
Either of these strategies eliminates the shdw message: BeginPackage["a`"]; Test1[t_] := Block[{v = t + 1}, t + v]; EndPackage[]; BeginPackage["b`"]; Test2[t_] := Block[{v = t + 2}, t + v]; EndPackage[]; or BeginPackage["a`"]; Test1[t_] := Block[{a`Private`v = t + 1}, t + v]; EndPackage[]; BeginPackage["b`"]; Test2[t_] := Block[{b`Private`v = t + 2}, t + v]; EndPackage[]; but a more complete solution is BeginPackage["a`"]; Test1::usage = "anything"; Begin["`Private`"]; Test1[t_] := Block[{v = t + 1}, t + v]; End[]; EndPackage[] BeginPackage["b`"]; Test2::usage = "anything"; Begin["`Private`"]; Test2[t_] := Block[{v = t + 2}, t + v]; End[]; EndPackage[] Variables created in the Private context don't shadow, and usage messages export what you need for use outside the package. Bobby On Tue, 17 Nov 2009 04:13:52 -0600, brien colwell <xcolwell at gmail.com> wrote: > hi all, > > I have a set of fairly complex packages. Frequently I use the same > variable names in function definitions and local modules across many > packages. Sometimes I see this type of warning: > > <varname>::shdw : Symbol <varname> appears in multiple contexts {*}; > definitions in context * may shadow or be shadowed ... > > This does not happen with symbols in the package context (already > fixed); it happens only with function parameters and variables in local > modules. I can recreate the warning with the following code snippet. It > seems to me that the variable 'v' should be safely local to each module. > Is there really a symbol conflict to worry about here? > > thanks, > Brien > > > In[1]:= > BeginPackage["a`"]; > Test1[t_] := Module[{v = t + 1}, t + v]; > EndPackage[]; > BeginPackage["b`"]; > Test2[t_] := Module[{v = t + 2}, t + v]; > EndPackage[]; > > Out[1]:= > v$::shdw: Symbol v$ appears in multiple contexts {b`,a`}; definitions in > context b` may shadow or be shadowed by other definitions. >> > > > > -- DrMajorBob at yahoo.com
- References:
- shadow warning with function parameters and local module variables
- From: brien colwell <xcolwell@gmail.com>
- shadow warning with function parameters and local module variables