为了理解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
Run Code Online (Sandbox Code Playgroud)
我尝试过类似的事情
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)
Run Code Online (Sandbox Code Playgroud)
我以为f现在是Proc,我可以称之为。但显然是“在foo中:错误的参数数量(0表示2)(ArgumentError)”
我必须使用什么语法?并且有可能返回一个“真实的”函数而不是Proc,以便代替f.call(1,2)我可以像我刚刚正常定义f一样缠绕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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1195 次 |
| 最近记录: |