Re: Wrapping Begin["Context`"], ..., End[] into a function
- To: mathgroup at smc.vnet.net
- Subject: [mg106093] Re: Wrapping Begin["Context`"], ..., End[] into a function
- From: dh <dh at metrohm.com>
- Date: Fri, 1 Jan 2010 05:35:26 -0500 (EST)
- References: <hhhmj3$o5o$1@smc.vnet.net>
Hi Leo,
to prevent defining symbols before the correct context has been
established, you may e.g. give your expression as a string:
Remove[f, x];
make[con_, myExp_] := (
BeginPackage[con];
Print["context=", $Context];
ToExpression@myExp;
EndPackage[];
)
make["con1`", "f[x_]:=x^2"]
Daniel
On 31 Dez., 09:15, Leo Alekseyev <dnqu... at gmail.com> wrote:
> Dear Mathgroup,
>
> I was wondering if it's possible to write a function that evaluates an
> expression in a particular context. In other words, instead of
> writing this:
>
> cpsave = $ContextPath;
> Begin["Materials1`"];
> $ContextPath = {"Materials1`", "System`"};
> myExpression;
> End[];
> $ContextPath = Global`cpsave;
>
> I would like to be able to make a function call, e.g.
> evaluateInContext["Materials1`",myExpression]
>
> The naive solution of
> evaluateInContext[cont_,expr_]:=(
> cpsave = $ContextPath;
> Begin[cont];
> ...
> )
>
> doesn't work because any symbol in parentheses is bound to the current
> context before any evaluation takes place. Is there a trick to make
> this work?
>
> Thanks, and happy New Year to all!
>
> --Leo