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