MathGroup Archive 2010

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

Search the Archive

Re: Contexts and Block

  • To: mathgroup at smc.vnet.net
  • Subject: [mg108834] Re: Contexts and Block
  • From: Chris Degnen <degnen at cwgsy.net>
  • Date: Fri, 2 Apr 2010 05:21:37 -0500 (EST)
  • References: <hov81p$93a$1@smc.vnet.net> <hovd0m$ce6$1@smc.vnet.net>

On 31 Mar, 12:51, Albert Retey <a... at gmx-topmail.de> wrote:

> ... I don't see any good reason to use symbols in your
> replacement rules. If you use strings instead you will avoid
> any context issues. In some cases this might also be
> more efficient, after all a symbol is something much more
> complicated than just a string. The following is basically
> doing the same thing with much less effort:
>
> BeginPackage["Test`"];
> TestFunction::usage = "Testing contexts";
> Begin["`Private`"];
> TestFunction[] := ({"a", "b"} /. Get["x.dat"]);
> End[];
> EndPackage[];
>
> x = {"a" -> "one", "b" -> "two"};
> x >> x.dat;
> TestFunction[]


Thanks Albert.  Actually, I had to add in a reset (as shown) for the
ContextPath since its rearrangement by EndPackage[] was causing some
odd problems in my application.  It works fine with the reset, but I
will probably switch to using strings as you suggested.

BeginPackage["Test`"];
TestFunction::usage = "Testing contexts";
Begin["`Private`"];
TestFunction[] := Module[{contextpath},

   a = 1;
   b = 1;

   contextpath = $ContextPath;
   BeginPackage["Test`"];
   Begin["`Private`"];
   Block[{a, b},

    x = Get["x.dat"];
    a2 = a /. x;
    b2 = b /. x;

    ];

   End[];
   EndPackage[];
   $ContextPath = contextpath;

   {a2, b2}];

End[];
EndPackage[];

x = {a -> "one", b -> "two"};
x >> x.dat;
TestFunction[]



  • Prev by Date: trying to use InputField as a continually attentive string input
  • Next by Date: Re: scaling a plot via imagesize
  • Previous by thread: Re: trying to use InputField as a continually attentive string input
  • Next by thread: math lib change in OS X bug + workaround