Re: Re: Work with Contexts
- To: mathgroup at smc.vnet.net
- Subject: [mg35790] Re: Re: Work with Contexts
- From: "Allan Hayes" <hay at haystack.demon.co.uk>
- Date: Wed, 31 Jul 2002 01:33:29 -0400 (EDT)
- References: <ai06l0$19t$1@smc.vnet.net> <200207290713.DAA05847@smc.vnet.net> <ai5u8n$brs$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Hermann, > 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. I have added some comments to your code about how I think that this happens: 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]; (* the symbol klasse1 is created when oo`new12[] is evaluated*) Print["Context von klasse: ", Context[klasse]]; (*klasse is created as Global`klasse when this rule is read*) 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[];(*klasse and klass1 are created as in context "Rechteck`" when \ this is evaluated, because context, contextpath are "Rechteck`", {"Rechteck`", "System`"}*) Print["nach new12:"]; Print[AH3]; Print["$Context: ", $Context]; Print["$ContextPath: ", $ContextPath]; -- 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:ai5u8n$brs$1 at smc.vnet.net... > 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: [mg35790] 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 > > > > > > > > > > > > > > > > >
- References:
- Re: Work with Contexts
- From: "Allan Hayes" <hay@haystack.demon.co.uk>
- Re: Work with Contexts