From: sean.m.huber@... Date: 2018-12-13T09:51:05+00:00 Subject: [ruby-core:90501] [Ruby trunk Feature#14392] Pipe operator Issue #14392 has been updated by shuber (Sean Huber). @dsferreira @zverok @shevegen @bughit How do you feel about the syntax from this working proof of concept? https://github.com/LendingHome/pipe_operator "https://api.github.com/repos/ruby/ruby".pipe do URI.parse Net::HTTP.get JSON.parse.fetch("stargazers_count") yield_self { |n| "Ruby has #{n} stars" } Kernel.puts end #=> Ruby has 15120 stars -9.pipe { abs; Math.sqrt; to_i } #=> 3 # Method chaining is supported: -9.pipe { abs; Math.sqrt.to_i } #=> 3 # Pipe | for syntactic sugar: -9.pipe { abs | Math.sqrt.to_i } #=> 3 [9, 64].map(&Math.pipe.sqrt) #=> [3.0, 8.0] [9, 64].map(&Math.pipe.sqrt.to_i.to_s) #=> ["3", "8"] ---------------------------------------- Feature #14392: Pipe operator https://bugs.ruby-lang.org/issues/14392#change-75659 * Author: dsferreira (Daniel Ferreira) * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- I would like to see implemented in ruby a pipe operator as we have in elixir. An example of application I have in mind is this: ```ruby class Foo def bar(var) puts ���Hello #{var}!��� end |> private def baz(arg) bar(arg) end end foo = Foo.new foo.baz("Fred") # => "Hello Fred!" ``` It can also help simplify method chains: ```ruby class Secret def initialise(user, password) @user = user @password = password end def second_pass(encrypted_string) encrypted_string.chain_4.chain_5.chain_6 end |> private ## # Super encryption def super_encryption @password.chain_1.chain_2.chain_3 |> second_pass end |> public end ``` And also simplify codes like this: ```ruby class Foo def bar(*args) baz = args.select { |arg| arg =~ /regex/ }.first good?(baz) end public :bar def good(arg) arg.to_s.size > 10 end private :good end ``` to become: ```ruby class Foo ## # Bar public method. def bar(*args) args.select { |arg| arg =~ /regex/ }.first |> good? end |> public def good(arg) arg.to_s.size > 10 end |> private end ``` Lots of local variables would be saved and I would expect some performance improvements with that. -- https://bugs.ruby-lang.org/ Unsubscribe: