Ruby:返回另一个函数的函数
发布时间:2020-12-17 03:55:39 所属栏目:百科 来源:网络整理
导读:为了理解 ruby的函数式编程部分,我想编写一个函数,它将2个函数f(x,y),g(x)作为参数并返回一个新函数h(x,y)= f(g(x )中,g(Y)). def foo(x,y) return x+yenddef bar(x) return 2*xenddef comp(f,g)endf=comp(f,g)f(1,2) #= 6 我尝试过类似的东西 def comp(f,g)
为了理解
ruby的函数式编程部分,我想编写一个函数,它将2个函数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(1,2)来编写f(1,2),就好像我刚刚定义了自己一样吗? 解决方法
这种类型的功能模式不像javascript或python那样在更多功能语言上运行.由于ruby具有可选括号,因此编写foo与调用foo方法而不传递任何参数相同.
要获取对方法的引用,您需要使用Object#方法方法: 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |