scope shadowing problem.

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

scope shadowing problem.

CodeDmitry
This post was updated on .
CONTENTS DELETED
The author has deleted this message.
Reply | Threaded
Open this post in threaded view
|

Re: scope shadowing problem.

Nicolai Hess-3-2


2016-11-14 22:34 GMT+01:00 CodeDmitry <[hidden email]>:
Is there a way to stop Pharo from preventing me from shadowing blocks?

There is no setting for ignoring this warning, but you can compile the code in a non-interactive way:

Object compile: 'foo
    [ :superenv |
    | env |
    env := Dictionary new.
    [ :superenv |
    | env |
    env := Dictionary new.
    [ :superenv |
    | env |
    env := Dictionary new

    "..." ] value: env ] value: env ] value: nil'

 

[:superenv |
         |env|
         env := Dictionary new.

    [:superenv |
        |env|
        env := Dictionary new.
        [:superenv |
            |env|
            env := Dictionary new.

            "..."
        ] value: env.
    ] value: env.
] value: nil.

It says superenv name already defined, even though that is the whole point,
I want to demonstrate dynamic links, eg:

var env_get = function(env, varname) {
    var tenv = env;

    while (true) {
        if (tenv.hasOwnProperty(varname)) {
            return tenv[varname];
        } else {
            if (tenv.superenv == null) {
                throw "no such variable" + tenv;
            } else {
                tenv = tenv.superenv;
            }
        }
    }
};

(function(superenv) {
    var env = {
        'superenv': superenv,
        'one': 1
    };

    console.log(env_get(env, "one"));

    (function(superenv) {
        var env = {
            'superenv': superenv,
            'two': 2
        };
        console.log(env_get(env, "one"));
        console.log(env_get(env, "two"));

        (function(superenv) {
            var env = {
                'superenv': superenv,
                'three': 3
            }
            console.log(env_get(env, "one"));
            console.log(env_get(env, "two"));
            console.log(env_get(env, "three"));
        })(env);
    })(env);
})(null);

in JavaScript

and

(defun env_get (env varname) (let
    ((tenv))
    (setq tenv env)

    (loop (let
        ((val))

        (setq val (gethash varname tenv))
        (if val
            (return val)
            (let
                ((superenv))
                (setq superenv (gethash 'superenv tenv))

                (if superenv
                    (setq tenv superenv)
                    (return 'undefined)
                )
            )
        )
    ))
))

((lambda (superenv) (let
    ((env))

    (setq env (make-hash-table))
    (setf (gethash 'superenv env) nil)
    (setf (gethash 'one env) 1)

    (print (env_get env 'one))
    (print (env_get env 'two))
    (print (env_get env 'three))

    ((lambda (superenv) (let
        ((env))

        (setq env (make-hash-table))
        (setf (gethash 'superenv env) superenv)
        (setf (gethash 'two env) 2)

        (print (env_get env 'one))
        (print (env_get env 'two))
        (print (env_get env 'three))

        ((lambda (superenv) (let
            ((env))

            (setq env (make-hash-table))
            (setf (gethash 'superenv env) superenv)
            (setf (gethash 'two env) 2)
            (setf (gethash 'three env) 3)

            (print (env_get env 'one))
            (print (env_get env 'two))
            (print (env_get env 'three))
        )) env)
    )) env)
)) nil)

in Lisp.





--
View this message in context: http://forum.world.st/scope-shadowing-problem-tp4923049.html
Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.