gpt4 book ai didi

ruby - 尝试通过 'square then double' 示例了解 Ruby 中的过程

转载 作者:太空宇宙 更新时间:2023-11-03 16:01:53 26 4
gpt4 key购买 nike

我正在尝试理解这段代码为何有效。具体来说,

1.在compose的方法定义中,为什么要新建一个Proc?为什么不能在不创建新过程的情况下调用 proc2 和 proc1?

2.我尝试创建函数“double_then_square”,但它只能用作赋值。是因为方法中不能有方法吗?递归不是它的反例吗?或者说你不能在方法中使用不同的方法?

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

square_it = Proc.new do |n|
n ** 2
end

double_it = Proc.new do |n|
n * 2
end


double_then_square = compose(double_it,square_it)
puts double_then_square.call(1)

最佳答案

  1. 因为这会在您定义 double_then_square 时立即执行,显然这是不可能的,因为我们还不知道 1 正在被传入。相反,你想要一些你可以调用的东西,例如,发送一个 .call(1) on。也就是说,我们要返回一个 Proc

  2. 不,它应该是可行的。但是,您将无法访问局部变量,因此您必须在方法中定义它们。由于它是一种适当的方法,您也将直接调用它而不是使用 .call。下面的代码对我有用。


def double_then_square(*args)
square_it = Proc.new do |n|
n ** 2
end

double_it = Proc.new do |n|
n * 2
end
compose(double_it,square_it).call(*args)
end
double_then_square(1)
# 4

关于ruby - 尝试通过 'square then double' 示例了解 Ruby 中的过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22724498/

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