Re: Re: Closure local return
| From: | Etienne Kneuss | Date: | Mon, 03 May 2010 16:03:31 +0000 |
| Subject: | Re: Re: Closure local return | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-48181@lists.php.net to get a copy of this message | ||
On Mon, May 3, 2010 at 5:54 PM, mathieu.suen <mathieu.suen@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?
Please, if you want to propose design changes, make a decent proposal
first, add some examples, not simply "what if PHP did <vague>".
Best,
>
>
> -- Mathieu Suen
>
>
>
--
Etienne Kneuss
http://www.colder.ch