在Ruby中使用高阶函数

2024-06-01 05:06:23 发布

您现在位置:Python中文网/ 问答频道 /正文

在学习了Python之后,我正在尝试学习Ruby,但是在将这些代码转换为Ruby时遇到了困难:

def compose1(f, g):
    """Return a function h, such that h(x) = f(g(x))."""
    def h(x):
        return f(g(x))
return h

我必须用积木翻译这个吗?或者在Ruby中有类似的语法吗?在


Tags: 代码returnthatdef语法functionruby积木
3条回答

假设f和{}是以下方法:

def f(x)
  x + 2
end

def g(x)
  x + 3
end 

我们可以将compose1定义为:

^{pr2}$

为此,我们需要将h定义为:

h = compose1(:f, :g)

您需要将方法名作为字符串/符号传递给send才能工作。那么,你就可以了

h.call 3 # => 8。可以找到更多信息here

你可以用Ruby中的lambdas来实现这一点(我在这里使用的是1.9 stunky lambda):

compose = ->(f,g) { 
  ->(x){ f.(g.(x)) }  
}

因此compose是一个返回另一个函数的函数,如您的示例所示:

^{pr2}$

请注意,函数式编程并不是Ruby的强项—它可以完成,但在我看来它看起来有点混乱。在

使用lambdas

def compose1(f,g)
  return lambda{ |x| f.call(g.call(x)) }
end

跑步的例子

^{pr2}$

相关问题 更多 >