我发现了这个密码:

squareIt = Proc.new do |x|
  x * x
end

doubleIt = Proc.new do |x|
  x + x
end

def compose proc1, proc2
  Proc.new do |x|
    proc2.call(proc1.call(x))
  end
end

doubleThenSquare = compose(doubleIt, squareIt)
squareThenDouble = compose(squareIt, doubleIt)

doubleThenSquare.call(5)
squareThenDouble.call(5)

doubleThenSquare5调用。doubleThenSquare等于compose的返回值,它有两个参数doubleItsquareIt通过。
我不知道5是如何被传递到不同的进程中的。它如何知道每种情况下Proc.new do |x|是什么?

最佳答案

让我们一步一步来。

doubleIt = Proc.new do |x|
  x + x
end
  #=> #<Proc:0x00000002326e08@(irb):1429>

squareIt = Proc.new do |x|
  x * x
end
  #=> #<Proc:0x00000002928bf8@(irb):1433>

proc1 = doubleIt
proc2 = squareIt

compose返回过程。
proc3 = Proc.new do |x|
    proc2.call(proc1.call(x))
end
  #=> #<Proc:0x000000028e7608@(irb):1445>

proc3的执行方式与
proc3_method(x)

在哪里?
def proc3_method(x)
  y = proc1.call(x)
  proc2.call(y)
end

proc3.call(x)
y = proc1.call(5)
  #=> 10
proc2.call(10)
  #=> 100

x = 5因此返回proc3_method(5),与100一样。

关于ruby - 传递过程和方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49865653/

10-10 17:40