Re: [RFC] Pre-draft for PipeOp v2

From: Date: Fri, 29 Sep 2017 09:29:48 +0000
Subject: Re: [RFC] Pre-draft for PipeOp v2
References: 1 2 3 4  Groups: php.internals 
Request: Send a blank email to internals+get-100798@lists.php.net to get a copy of this message
2017-09-28 21:07 GMT+02:00 Levi Morrison <levim@php.net>: > On Wed, Sep 27, 2017 at 1:56 PM, Sara Golemon <pollita@php.net> wrote: > > > On Thu, Sep 21, 2017 at 5:13 PM, Stanislav Malyshev <smalyshev@gmail.com > > > > wrote: > > > It'd be also nice then if we could have some syntax that allowed us to > > > refer to functions/methods as callables - mostly for the benefit of the > > > code readers and IDEs. I.e. you can do "hello" |> "strtoupper" > > > and it's > > > fine but it is not at all intuitive what you're doing sending one > string > > > into another. Same with "hello" |> [$this, 'bar']. Now, if we > > > could do > > > something like this: > > > "hello" |> &{strtoupper} > > > "hello" |> &{$this->bar} > > > > > Super-hacky implementation (that I wouldn't want to merge, but it > > shows the syntax at work). > > > > > > https://github.com/php/php-src/compare/master...sgolemon:lambda > > which provides a form of both short-closures and partial functions. > > > > Combined with also-super-hacky pipe diff from earlier, you get: > > > > $x = "Hello" > > |> &{strtoupper($0)} > > |> &{ $0 . "world" } > > |> &{strrev($0)}; > > > > var_dump($x); > > // string(10) "dlrowOLLEH" > > > > -Sara > > > > -- > > PHP Internals - PHP Runtime Development Mailing List > > To unsubscribe, visit: http://www.php.net/unsub.php > > > > By the way the & is not required. When experimenting with > possible short > closure syntax I created an implementation for {} to make sure > it was > possible: > > $x = "Hello" > |> {strtoupper($0)} > |> { $0 . "world" } > |> {strrev($0)}; > > If people would prefer that syntax for short-closures then that's fine by > me. If we made it this concise there wouldn't be a need for a > $$ proposal > anyway. > I love this syntax with braces, I wanted to do like it in https://wiki.php.net/rfc/short-closures but only for replacement of string or array callables as closures. > > --- > > My impression from the community is that the pipe operator is desirable but > not if it encourages string or array callables. In that vein which syntax > do you prefer? > > // brace style > $x = "Hello" > |> {strtoupper($0)} > |> { $0 . "world" } > |> {strrev($0)}; > > // fn style > $x = "Hello" > |> fn($x) => strtoupper($x)} > |> fn($x) => $x . "world" > |> fn($x) => strrev($0); > > // caret style > $x = "Hello" > |> ^($x) => strtoupper($x)} > |> ^($x) => $x . "world" > |> ^($x) => strrev($0); > > I included these two styles because they are the most promising versions > from the arrow functions discussions. I think my preferred order is the one > I wrote them in. The brace style is concise, nicely delimits the > expression, and seems the clearest for me to read because the symbols don't > dominate. The fn style seems nicer than caret which has too many symbols in > close proximity for my taste. > > Community thoughts? Which short closure style pairs the nicest with the > pipe operator? > -- regards / pozdrawiam, -- Michał Brzuchalski about.me/brzuchal brzuchalski.com

« previous php.internals (#100798) next »