gpt4 book ai didi

ruby - 在 ruby​​ 中优雅地实现 'map (+1) list'

转载 作者:数据小太阳 更新时间:2023-10-29 07:02:05 24 4
gpt4 key购买 nike

title 中的短代码是在 Haskell 中,它做了类似的事情

list.map {|x| x + 1}

ruby 。

虽然我知道那种方式,但我想知道的是,是否有更优雅的方式来像在 Haskell 中一样在 ruby​​ 中实现同样的事情。

我真的很喜欢 ruby​​ 中的 to_proc 快捷方式,就像这样:

[1,2,3,4].map(&:to_s)
[1,2,3,4].inject(&:+)

但这只接受 Proc 和方法之间完全匹配的参数数。

我正在尝试寻找一种方法,允许将一个或多个参数额外传递到 Proc,而不像第一个演示那样使用无用的临时 block /变量。

我想这样做:

[1,2,3,4].map(&:+(1))

ruby 是否有类似的方式来做到这一点?

最佳答案

如果你只想添加一个,那么你可以使用 succ method :

>> [1,2,3,4].map(&:succ)
=> [2, 3, 4, 5]

如果你想添加两个,你可以使用 lambda:

>> add_2 = ->(i) { i + 2 }
>> [1,2,3,4].map(&add_2)
=> [3, 4, 5, 6]

对于任意值,您可以使用构建 lambda 的 lambda:

>> add_n = ->(n) { ->(i) { i + n } }
>> [1,2,3,4].map(&add_n[3])
=> [4, 5, 6, 7]

您还可以使用 lambda 生成方法:

>> def add_n(n) ->(i) { i + n } end
>> [1,2,3,4].map(&add_n(3))
=> [4, 5, 6, 7]

关于ruby - 在 ruby​​ 中优雅地实现 'map (+1) list',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10760142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com