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))
        }
    )

    Type obj
    print -r "${obj.x}" "${obj.x}" # prints "1 2"

The above should be equivalent to the follwing Python code:

    #!/usr/bin/env python3

    class Type(object):
        def __init__(self):
            self.y = 5

        @property
        def x(self):
            self.y += 1
            return self.y 

    obj = Type()
    print(obj.x, obj.x) # prints "6 7"


Or the following C# code:

    using System;

    namespace Program {
        public class Type {
            private int y = 5;
            public string x {
                get {
                    y++;
                    return this.y.ToString();
                }
            }
        }

        public class Program {
            static int Main(string[] argv) {
                var obj = new Type();
                Console.WriteLine("{0} {1}", obj.x, obj.x); // prints "6 7"
                return 0;
            }
        }
    }

-- 
Dan Douglas
_______________________________________________
ast-users mailing list
[email protected]
http://lists.research.att.com/mailman/listinfo/ast-users

Reply via email to