Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

[REBOL] Re: Embedded Object and Scope - again...

From: joel:neely:fedex at: 10-May-2001 13:19

While discussing this with a collegue, I had a couple of added insights. Joel Neely wrote:
...
> As to why the same logic isn't propagated upward through > multiple layers of enclosing objects, I can only speculate > that RT: > > 1) simply didn't think of it > 2) thought of it but didn't want to incur the expense, > assuming that it wasn't as compelling a situation, or > 3) implemented the context mechanism in a way that made > it infeasible to chase up a list of "nested contexts". >
That may sound harsher than I meant -- I wasn't criticizing, but just trying (poorly) to say that what one can do easily with one mechanism may or may not be easy or obvious or even useful if one has a different conceptual mechanism. I should also have added another option: 4) the entire concept of "embedded object" isn't really meaningful to REBOL. Consider this transcript:
>> obja: make object! [
[ a: 1 [ b: "hi" [ f: func [] [print a] [ ]
>> objb: make object! [
[ c: 10 [ d: "there" [ x: obja [ g: func [][print [x/b d c + x/a]] [ ]
>> objb/g
hi there 11
>> objc: make objb [c: 20 d: "you guys"] >> objc/g
hi you guys 21
>> obja/a: 100
== 100
>> objb/g
hi there 110
>> objc/g
hi you guys 120
>> source objc
objc: make object! [ c: 20 d: "you guys" x: make object! [ a: 100 b: "hi" f: func [][print a] ] g: func [][print [x/b d c + x/a]] ] Now, let't think about these questions: 1) In what sense do OBJB and OBJC "contain" OBJA? 2) In this case, don't we want OBJB and OBJC to "share" a single OBJA (even though we don't retain its global name)? 3) How is this different from either of the cases below? CASE 1: "EMBEDDED" OBJECT
>> obje: make object! [
[ c: 20 [ d: "yawl" [ x: make object! [ [ a: 2 [ b: "greetings" [ f: func [] [print a] [ ] [ g: func [][print [x/b d c + x/a]] [ ]
>> obje/g
greetings yawl 22
>> objf: make obje [c: 30] >> objf/g
greetings yawl 32 CASE2: "PRIVATE" OBJECT
>> use [secretobj] [
[ secretobj: make object! [ [ a: 3 [ b: "howdy" [ f: func [] [print a] [ ] [ objg: make object! [ [ c: 30 [ d: "youse guys" [ x: secretobj [ g: func [][print [x/b d c + x/a]] [ ] [ ]
>> objg/g
howdy youse guys 33
>> objh: make objg [a: 40 d: "aloha"] >> objh/g
howdy aloha 33 The fact that an object is created concurrently with an enclosing object is time-wise coincidental, except when the "inner" object contains words that refer to members of the "outer" object without explicit qualification.
> > > > 2. How can I get my descendant-embedded-object to retrieve > > the property of it's container, the descendant-object ? > > > > I can think of a couple of ways to get this effect. > > 1) Construct a new object in a way that strips off context > for all words. >
Of course this fails if you *DO* want some sharing -- if you want the new object simply to refer to a third party also referenced within the old object. -jn-