2017-09-28 21:07 GMT+02:00 Levi Morrison <le...@php.net>: > On Wed, Sep 27, 2017 at 1:56 PM, Sara Golemon <poll...@php.net> wrote: > > > On Thu, Sep 21, 2017 at 5:13 PM, Stanislav Malyshev <smalys...@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