gpt4 book ai didi

Ruby:一个函数返回另一个函数

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

为了理解 ruby​​ 的函数式编程部分,我想编写一个函数,它将两个函数 f(x,y),g(x) 作为参数并返回一个新函数 h(x,y)=f( g(x),g(y))。

def foo(x, y)
return x+y
end

def bar(x)
return 2*x
end

def comp(f,g)

end

f=comp(f,g)
f(1,2) #=> 6

我试过类似的东西

def comp(f,g)
mylambda = lambda {|x,y| return f(g(x),g(y))}
return mylambda
end
f=comp(foo, bar)
f.call(1,2)

我认为 f 现在是一个 Proc,我可以直接调用它。但显然“在‘foo’中:参数数量错误(0 代表 2)(ArgumentError)”

我必须使用什么语法?是否有可能返回一个“真正的”函数而不是 Proc,这样我就可以像我自己正常定义 f 一样而不是 f.call(1,2) 来扭曲 f(1,2)?

最佳答案

这种类型的函数式模式不像在更多函数式语言(如 javascript 或 python)上那样流畅地工作。由于 ruby​​ 有可选的括号,编写 foo 与不传递任何参数调用 foo 方法是一样的。

要获取对方法的引用,您需要使用Object#method 方法:

def foo(x, y)
x + y
end

def bar(x)
x * 2
end

def comp(f, g)
lambda { |x, y| f.call(g.call(x), g.call(y)) }
end

h = comp(method(:foo), method(:bar))
h.call(1, 2) # => 6

关于Ruby:一个函数返回另一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19799902/

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