2024-06-01 05:06:23 发布
网友
在学习了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中有类似的语法吗?在
假设f和{}是以下方法:
f
def f(x) x + 2 end def g(x) x + 3 end
我们可以将compose1定义为:
compose1
为此,我们需要将h定义为:
h = compose1(:f, :g)
您需要将方法名作为字符串/符号传递给send才能工作。那么,你就可以了
send
h.call 3 # => 8。可以找到更多信息here
h.call 3 # => 8
你可以用Ruby中的lambdas来实现这一点(我在这里使用的是1.9 stunky lambda):
compose = ->(f,g) { ->(x){ f.(g.(x)) } }
因此compose是一个返回另一个函数的函数,如您的示例所示:
compose
请注意,函数式编程并不是Ruby的强项—它可以完成,但在我看来它看起来有点混乱。在
使用lambdas
def compose1(f,g) return lambda{ |x| f.call(g.call(x)) } end
跑步的例子
假设}是以下方法:
f
和{我们可以将
^{pr2}$compose1
定义为:为此,我们需要将h定义为:
h = compose1(:f, :g)
您需要将方法名作为字符串/符号传递给
send
才能工作。那么,你就可以了h.call 3 # => 8
。可以找到更多信息here你可以用Ruby中的lambdas来实现这一点(我在这里使用的是1.9 stunky lambda):
因此
^{pr2}$compose
是一个返回另一个函数的函数,如您的示例所示:请注意,函数式编程并不是Ruby的强项—它可以完成,但在我看来它看起来有点混乱。在
使用lambdas
跑步的例子
^{pr2}$相关问题 更多 >
编程相关推荐