Niklas Keller wrote on 03/03/2015 10:55:
Gr, top-posting...
Sorry, was on mobile. ;-)
However, since the existence of the word "yield" is the only thing
that
marks a coroutine now, how about using a variant of that for the final
value, e.g. "yield final $foo"?
What's the final value? The last "yield"ed value or a return?
"yield final" would mark the final result of the coroutine, as opposed
to the intermediate values passed out with a normal "yield".
Just to give you some real world example:
If you're using "return", it would look like that:
public function getSession ($sessionId) {
$result = yield $this->redis->get("session.{$sessionId}")); //
We're waiting here until redis responded.
return json_decode($result);
}
My suggestion is simply to change the keyword:
public function getSession ($sessionId) {
$result = yield $this->redis->get("session.{$sessionId}")); //
We're waiting here until redis responded.
yield final json_decode($result);
}
The reasoning being that when you run getSession(42), it *doesn't*
return the result of json_decode(), it returns a pointer to the
coroutine's state, which you can resume later.
Actually, I don't think that example makes sense, because JSON gets sent
out at the first yield, and then sent back in, so the caller would look
something like this:
$foo = getSession(42);
$json_data = $foo->current();
$foo->send($json_data);
$decoded = $foo->getReturn();
But never mind, I think we both get the idea.
I understand the desire for a "final result", but I don't like reusing
the word "return", because it's never "returned" as the result of
running the function, it's just made available through some specific
method/syntax.
Regards,
--
Rowan Collins
[IMSoP]