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. --- 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?