我发现了这个密码:
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)
doubleThenSquare
用5
调用。doubleThenSquare
等于compose
的返回值,它有两个参数doubleIt
和squareIt
通过。我不知道
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/