Project

General

Profile

Actions

Feature #20580

open

Pipe Operator accepting lambda

Added by martinosis (Martin Chabot) 9 days ago. Updated 2 days ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:118316]

Description

I think that the pipe operator was not reflecting the actual pipe operator in functional programming language.

In Elixir, Elm, F# etc. The pipe operator takes a value and applies it on the lambda at the right of the operator. Example

add_one = -> a { a + 1 }
add_two = -> a { a + 2 }

2 |> add_one |> add_two == 5

In combination with the >> operator, some interesting thing can be done.

2 |> add_one >> add_two

you can refactor to

add_tree = add_one >> add_two
2 |> add_tree

I currently use the then method on Object to do the equivalent. However this takes more characters and you need to put the closing bracket at the end of the line.

2.then(&add_one >> add_tree)

Updated by martinosis (Martin Chabot) 9 days ago

  • Subject changed from Pipe Operator accepting lamnda to Pipe Operator accepting lambda

Description

I think that the previously pipe operator suggested syntax was not reflecting the actual pipe operator in functional programming languages.

In Elixir, Elm, F# etc. The pipe operator takes a value and applies it on the lambda at the right of the operator. Example:

add_one = -> a { a + 1 }
add_two = -> a { a + 2 }

2 |> add_one |> add_two == 5

In combination with the >> operator, some interesting thing can be done.

2 |> add_one >> add_two

you can refactor to

add_tree = add_one >> add_two
2 |> add_tree

We can use the then method on Object to do the equivalent. However this takes more characters and you need to put the closing bracket at the end of the line.

2.then(&add_one >> add_tree)

The suggested syntax would support the actual meaning of the pipe operators in functional languages.

Updated by tenderlovemaking (Aaron Patterson) 9 days ago ยท Edited

I like this, but I feel like in practice the syntax wouldn't help much.

It looks nice when you use it with local variables, but using it with methods would be a huge pain (not to mention the performance aspects) since you have to get the method and convert it to a lambda:

2 |> &obj.method(:whatever)

I call methods much more frequently than lambdas, so I'm not sure how much this syntax would improve my life.

Updated by matheusrich (Matheus Richard) 2 days ago

I call methods much more frequently than lambdas, so I'm not sure how much this syntax would improve my life.

Agreed. It would be more useful if we had a syntax for getting a method from an object (like we once had).

Actions

Also available in: Atom PDF

Like0
Like0Like1Like0