MathGroup Archive 2002

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

Search the Archive

Re: Re: Work with Contexts

  • To: mathgroup at smc.vnet.net
  • Subject: [mg35782] Re: [mg35757] Re: Work with Contexts
  • From: "Hermann Schmitt" <schmitther at netcologne.de>
  • Date: Tue, 30 Jul 2002 07:22:52 -0400 (EDT)
  • References: <ai06l0$19t$1@smc.vnet.net> <200207290713.DAA05847@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

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: [mg35782] [mg35757] 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: Re: More weird integration issues...
  • Next by Date: Re: More weird integration issues...
  • Previous by thread: Re: Work with Contexts
  • Next by thread: Re: Work with Contexts