Ruby 如何将两个过程合并为一个过程?
只是想知道是否有一种语法快捷方式,可以将两个进程连接起来,从而将其中一个进程的输出传递给另一个进程,相当于:Ruby 如何将两个过程合并为一个过程?,ruby,function-composition,Ruby,Function Composition,只是想知道是否有一种语法快捷方式,可以将两个进程连接起来,从而将其中一个进程的输出传递给另一个进程,相当于: a = ->(x) { x + 1 } b = ->(x) { x * 10 } c = ->(x) { b.( a.( x ) ) } 当使用方法(:abc).to_proc和:xyz.to_proc更多的糖时,这会很方便,在生产代码中并不推荐 a = Proc.new { |x| x + 1 } b = Proc.new { |x| x * 10 } c = Pr
a = ->(x) { x + 1 }
b = ->(x) { x * 10 }
c = ->(x) { b.( a.( x ) ) }
当使用方法(:abc).to_proc
和:xyz.to_proc
更多的糖时,这会很方便,在生产代码中并不推荐
a = Proc.new { |x| x + 1 }
b = Proc.new { |x| x * 10 }
c = Proc.new { |x| b.call(a.call(x)) }
您可以像这样创建联合操作
class Proc
def union p
proc {p.call(self.call)}
end
end
def bind v
proc { v}
end
那么你可以这样使用它
a = -> (x) { x + 1 }
b = -> (x) { x * 10 }
c = -> (x) {bind(x).union(a).union(b).call}
更新的答案。Ruby 2.6中已经提供了Proc composition。有两种方法
,它们的组成顺序不同。所以现在你可以做了
##ruby2.6
a = ->(x) { x + 1 }
b = ->(x) { x * 10 }
c = a >> b
c.call(1) #=> 20
请解释一下这个答案中缺少了什么糖?如果我不清楚的话,我很抱歉:你得到了
a
和b
。您需要获得c
。你当然可以写一个新的proc,但是我想知道是否有一个更短的方法,比如b.wrap a
或者什么的。非常好!你为什么不推荐它呢?重新打开内置类(比如Proc)总是有风险的,因为其他库可能也会这样做,或者将来对Ruby本身进行更改。我很惊讶它不在标准库中。似乎是一件相当有用的事情。
##ruby2.6
a = ->(x) { x + 1 }
b = ->(x) { x * 10 }
c = a >> b
c.call(1) #=> 20