加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读