On Thu, Jan 19, 2017 at 5:54 AM, Levi Morrison <le...@php.net> wrote:
I've talked to you about this RFC off-list, but I figured I should
mention it on-list as well. I think we should make `|>` and `$$` two
independent operators that work well together (rather than only
together).
Firstly, Levi, can I say I really like this line of thinking at first
sight. As long as we can avoid it becoming too cryptically Perlish...
On 19/01/2017 22:17, Ryan Pallas wrote:
When you say assert the right hand side is callable, does that mean to
call an object method, you would do [$obj, 'method']? What about functions,
is it just the name like $str |> trim, or is it $str |> trim()?
This is a good point. The difference between the pipe operator as
proposed by Sara and the combination of two separate operators is that
in Sara's proposal you'd always write this:
$str |> trim($$)
But in Levi's proposal as I understand it, the right-hand side is not
syntax, it's just constrained to be callable, so the simpler (but rather
ugly) form would be:
$str |> 'trim'
On its own, trim($$) rather pointlessly wraps a function with one
argument into another function, still with one argument, effectively
short-hand for Closure::fromCallable('trim') [incidentally, fromCallable
isn't actually listed in the documentation yet].
Since ($$) would leave a closure effectively unchanged, you could
actually write:
$str |> trim($$)($$)($$)($$)
And interestingly, the $$ magic couldn't be used to turn a function with
one argument into one with zero, because trim($$)($foo) actually
executes the function.
This all feels fiddly for the same reason I dislike generators being
introduced with "function" rather than their own keyword: it's one
syntax hiding behind another. Which is a shame, because as I say, I
liked the general idea.
Regards,
--
Rowan Collins
[IMSoP]
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php