MathGroup Archive 2002

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

Search the Archive

Fw: Re: Work with Contexts

  • To: mathgroup at smc.vnet.net
  • Subject: [mg35795] Fw: [mg35785] Re: Work with Contexts
  • From: "Hermann Schmitt" <schmitther at netcologne.de>
  • Date: Thu, 1 Aug 2002 04:35:03 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

Hi Allen and Jens-Peer,
I understand you, the line
 Print["Context von klasse: ", Context[klasse]];
causes the definition of "klasse" to be created in the Context Global`
I thank you for your help! I exerted much effort without finding the cause!
I do dislike local variables because they mean more writing effort, I think
they are often not necessary for tests.
This test had the aim to define "klasse" in the context "Rechteck`", where
the context will be a variable in the final program..
Hermann Schmitt
----- Original Message -----
From: "Jens-Peer Kuska" <kuska at informatik.uni-leipzig.de>
To: mathgroup at smc.vnet.net
Subject: [mg35795] [mg35785] Re: Work with Contexts


> Hi,
>
> according to Allan's an my explanation
>
> Mathematica *must* parse the definition of oo`new12[] *before*
> it is evaluated. Because you don't like local variables you
> write
>
> oo`new12[] := (
> Print["Name klasse - Anfang"];
>  Print["$Context: ", $Context];
>  Print["$ContextPath: ", $ContextPath];
>  ToExpression[oo`hfield];
>  Print["Context von klasse: ", Context[klasse]];
>  oo`resumeContext[];
>  Print["Name klasse - Ende"];
>  );
>
> and parsing this create a global symbol "klasse" because
> the parser see the line
>
>  Print["Context von klasse: ", Context[klasse]];
>
> If you wish to avoid this you can use
>
> oo`new12[] := Module[{UsingObjectsIsDaft`class},
>       Print["Name klasse - Anfang"];
>       Print["$Context: ", $Context];
>       Print["$ContextPath: ", $ContextPath];
>       UsingObjectsIsDaft`class = ToExpression[oo`hfield];
>       Print["Context von klasse: ",
>         Context[Evaluate[UsingObjectsIsDaft`class]]];
>       oo`resumeContext[];
>       Print["Name klasse - Ende"];
>       ];
>
>
> Regards
>   Jens
>
>
> Hermann Schmitt wrote:
> >
> > Hello Allan,
> > I have a new program:
> >
> > oo`hfield = "klasse1";
> > oo`newContext[ctxp_] := (
> >
> >   $ContextPath = Join[ctxp, $ContextPath];
> >       BeginPackage[ctxp[[1]]];
> >    If[Length[ctxp]>1,
> >        $ContextPath = Join[ctxp, Rest[$ContextPath]];
> >     ]
> >     )
> > oo`resumeContext[] := (
> >         EndPackage[];
> >        $ContextPath = Drop[$ContextPath, 1];
> > )
> > oo`new11[x_] := (
> > Print["Anfang new11"];
> > klassnam = x;
> > tsx = ToString[klassnam];
> > oo`dat = "D:\\Math_OO\\classes\\" <> tsx <> ".cl";
> > ctx = klassnam <> "`";
> > oo`newContext[{ctx}];
> > )
> > oo`new12[] := (
> > Print["Name klasse - Anfang"];
> >  Print["$Context: ", $Context];
> >  Print["$ContextPath: ", $ContextPath];
> >  ToExpression[oo`hfield];
> >  Print["Context von klasse: ", Context[klasse]];
> >  oo`resumeContext[];
> >  Print["Name klasse - Ende"];
> >  );
> >   Print["Anfang Programm:"];
> >   Print["$Context: ", $Context];
> >  Print["$ContextPath: ", $ContextPath];
> >  oo`new11["Rechteck"];
> >   Print["nach new11:"];
> >   Print["$Context: ", $Context];
> >  Print["$ContextPath: ", $ContextPath];
> >  oo`hfield = "klasse";
> >  oo`new12[];
> >    Print["nach new12:"];
> >    Print["$Context: ", $Context];
> >  Print["$ContextPath: ", $ContextPath];
> >
> > and the results:
> >
> > Anfang Programm:
> > $Context: Global`
> > $ContextPath: {Global`, System`}
> > Anfang new11
> > nach new11:
> > $Context: Rechteck`
> > $ContextPath: {Rechteck`, System`}
> > Name klasse - Anfang
> > $Context: Rechteck`
> > $ContextPath: {Rechteck`, System`}
> > klasse
> > klasse::shdw: Symbol klasse appears in multiple contexts {Rechteck`,
> > Global`}
> >     ; definitions in context Rechteck`
> >      may shadow or be shadowed by other definitions.Context von klasse:
> > Global`
> > Name klasse - Ende
> > nach new12:
> > $Context: Global`
> > $ContextPath: {Global`, System`}
> > In[19]:=
> >
> > According your theory, I think, "klasse1" should be defined in Global`
and
> > "klasse" only in Rechteck But this is not the case. Therefore - excuse
me -
> > I doubt, that your theory is correct.
> >
> > Hermann Schmitt
> >
> > ----- Original Message -----
> > From: "Allan Hayes" <hay at haystack.demon.co.uk>
To: mathgroup at smc.vnet.net
> > Subject: [mg35795] [mg35785]  Re: Work with Contexts
> >
> > > Hermann,
> > >
> > > > My question is:
> > > > Why is the variable "klasse" also defined in the context Global?
> > >
> > > klasse is created in the context "Global`" when the assignment
> > >
> > > oo`new12[] := (Print["Name klasse - Begin"];
> > >     Print["$Context: ", $Context];
> > >     Print["$ContextPath: ", $ContextPath];
> > >     ToExpression["klasse"];
> > >     Print["Context of klasse: ", Context[klasse]];
> > >     oo`resumeContext[];
> > >     Print["Name klasse - End"];)
> > >
> > > is converted into internal form (with contexted symbols) prior to
> > > evaluation.
> > >
> > > This is before
> > >     oo`new11["Rechteck"];
> > > is evaluated
> > >
> > > --
> > > 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
> > >
> > >
> > > "Hermann Schmitt" <schmitther at netcologne.de> wrote in message
> > > news:ai06l0$19t$1 at smc.vnet.net...
> > > > Hello,
> > > > I have the following program:
> > > >
> > > > oo`newContext[ctxp_] := (
> > > >     BeginPackage[ctxp[[1]]];
> > > >     )
> > > > oo`resumeContext[] := (
> > > >         EndPackage[];
> > > >        $ContextPath = Drop[$ContextPath, 1];
> > > >      )
> > > > oo`new11[x_] := (
> > > > Print["Begin new11"];
> > > > klassnam = x;
> > > > ctx = klassnam <> "`";
> > > > oo`newContext[{ctx}];
> > > > );
> > > > oo`new12[] := (
> > > > Print["Name klasse - Begin"];
> > > >  Print["$Context: ", $Context];
> > > >  Print["$ContextPath: ", $ContextPath];
> > > >  ToExpression["klasse"];
> > > > Print["Context of klasse: ", Context[klasse]];
> > > >  oo`resumeContext[];
> > > >  Print["Name klasse - End"];
> > > >  );
> > > >   Print["Begin Programm:"];
> > > >   Print["$Context: ", $Context];
> > > >  Print["$ContextPath: ", $ContextPath];
> > > >  oo`new11["Rechteck"];
> > > >  oo`new12[];
> > > >    Print["after new12:"];
> > > >    Print["$Context: ", $Context];
> > > >  Print["$ContextPath: ", $ContextPath];
> > > >
> > > > I get the following results:
> > > >
> > > > Begin Programm:
> > > > $Context: Global`
> > > > $ContextPath: {Global`, System`}
> > > > Begin new11
> > > > Name klasse - Begin
> > > > $Context: Rechteck`
> > > > $ContextPath: {Rechteck`, System`}
> > > > klasse
> > > > klasse::shdw: Symbol klasse appears in multiple contexts {Rechteck`,
> > > > Global`}
> > > >     ; definitions in context Rechteck`
> > > >      may shadow or be shadowed by other definitions.Context of
klasse:
> > > > Global`
> > > > Name klasse - End
> > > > after new12:
> > > > $Context: Global`
> > > > $ContextPath: {Global`, System`}
> > > > In[14]:=
> > > >
> > > > My question is:
> > > > Why is the variable "klasse" also defined in the context Global?
> > > >
> > > > Hermann Schmitt
> > > >
> > > >
> > > >
> > >
> > >
> > >
>



  • Prev by Date: Re: realtime plotting of points
  • Next by Date: Changing FontSize, FontWeight, Font Family for an entire Table?
  • Previous by thread: Re: realtime plotting of points
  • Next by thread: Changing FontSize, FontWeight, Font Family for an entire Table?