On 22 July 2013 12:06, Cedric Blancher <[email protected]> wrote: > On 22 July 2013 11:53, Dan Douglas <[email protected]> wrote: >> On Monday, July 22, 2013 11:08:35 AM Irek Szczesniak wrote: >>> On Mon, Jul 22, 2013 at 11:00 AM, Dan Douglas <[email protected]> wrote: >>> > In this type, I can't think of any way to refer to "obj" from within >>> > "x.get". >>> > _ should point to "obj" in this context, not "obj.x". >>> > >>> > #!/usr/bin/env ksh >>> > >>> > typeset -T Type=( >>> > typeset -h 'This will be a property.' x >>> > integer -h 'This will be the backing field for x.' y=5 >>> > >>> > function x.get { >>> > # Huge problem here because _ refers to x, >>> > # we can't access anything. >>> > ((.sh.value = ++_.y)) >>> >>> This can't work. .sh.value is identical to _ >>> >>> Think about ksh93 types as compound variables with predefined >>> discipline functions. In your example you're trying to assign the >>> value of ++_.y to the value of a compound variable - which obviously >>> cannot work. >>> >>> Irek >> >> I don't know, it doesn't make sense to me for disciplines within types that >> hook the fields of the type. I think _ should be different here than for a >> bare discipline defined in the global scope. Those don't have to care about >> which instance they are a part of. >> >> The only workarounds I can think of are nasty, like: >> nameref this=${.sh.name%.*}; .sh.value=${this.y}; > > Oh, I got it. What we need is a way to access the parent of a > variable, like cd .. accesses the parent directory. _... obviously > won't work. > > What about _._ to access the parent in both types and compound variable trees? > > > For example: > > compound c1=( compound c2=( integer i=5 ) ) > nameref n1=c1.c2.i > nameref nc2=i._ # accesses c2 though i > nameref nc1=i._._ # accesses c1 through i
That example doesn't work. AFAIK you want s/i./n1./ IMO this would be better: Please follow the Unix philosophy and use __ (two _) for the parent: compound c1=( compound c2=( integer i=5 ) ) nameref ni=c1.c2.i nameref nc2=ni.__ # accesses c2 though i nameref nc1=ni.__.__ # accesses c1 through i Wendy _______________________________________________ ast-users mailing list [email protected] http://lists.research.att.com/mailman/listinfo/ast-users
