gpt4 book ai didi

ruby - 传递过程和方法

转载 作者:数据小太阳 更新时间:2023-10-29 08:42:53 24 4
gpt4 key购买 nike

我遇到了这段代码:

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 的返回值,它有两个参数 doubleItsquareIt 传递。

我不明白 5 是如何一直传递到不同的过程 Proc.new do |x| 中的。它如何知道每种情况下的 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

proc3 = Proc.new do |x|
proc2.call(proc1.call(x))
end
#=> #<Proc:0x000000028e7608@(irb):1445>

proc3.call(x)的执行方式与

相同
proc3_method(x)

在哪里

def proc3_method(x)
y = proc1.call(x)
proc2.call(y)
end

x = 5时,

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

proc3_method(5) 因此返回 100proc3.call(5) 也是如此。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com