On 05/03/2010 06:03 PM, Etienne Kneuss wrote:
On Mon, May 3, 2010 at 5:54 PM, mathieu.suen<mathieu.s...@easyflirt.com>  wrote:
I think you actually misunderstand the difference in

http://en.wikipedia.org/wiki/Closure_%28computer_science%29#Differences_in_semantics

The way I read if the difference is wether it returns from the closure
function or the surrounding function *calling* it. Not the *defining*
scope.

And no, it doesn't make sense in the PHP context IMHO.

- Chris


"returns from the closure function"
To go were?

I had maintain a smalltalk compiler.
I did not misunderstand the difference.

The Common Lisp implementation is the more explicit one.
For exemple:

(defun eval-l1 (fct) (funcall fct))
(defun bar (x) (eval-l1 #'(lambda () (return-from bar 45)))
                        x)

(bar 23) ->  45

When funcall is apply you do not return from eval-l1. You return from bar.
Which is the defining scope of the lanbda.
So

<?php
$a = function() { return; }

$a();
echo "end";
?>

would it be an infinite loop? would it print end?

what about:

<?php
function foo($c) {
    bar($c);
    echo "f";
}

function bar($c) {
    $c();
    echo "b";
}
$c = function() { return; }

foo($c);

what would it print? "f"? "fb" ? nothing?

This is an interesting question.
It depend on whether you consider your lanbda as a continuation.
The other safe possibility is to generate an error when you evaluate a lambda
 were the context has escape which is the case in your example.

But a would not change the semantic of "return" just chose an other keyword.

$c = function() { return-from-def-scope; }


Please, if you want to propose design changes, make a decent proposal
first, add some examples, not simply "what if PHP did<vague>".

No big deal, I don't want to make any proposition,  I am just asking.
I am not using PHP as a language for fun.

Best,

-- Mathieu Suen



-- Mathieu Suen
        

Reply via email to