Re: Re: Closure local return
| From: | mathieu.suen | Date: | Tue, 04 May 2010 07:08:25 +0000 |
| Subject: | Re: Re: Closure local return | ||
| References: | 1 2 3 4 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-48185@lists.php.net to get a copy of this message | ||
On 05/03/2010 06:03 PM, Etienne Kneuss wrote:
On Mon, May 3, 2010 at 5:54 PM, mathieu.suen<mathieu.suen@easyflirt.com> wrote:So <?php $a = function() { return; } $a(); echo "end"; ?> would it be an infinite loop? would it print end? what about: <?php function foo($c) {"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)))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. - ChrisI think you actually misunderstand the difference inx)(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.
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