gpt4 book ai didi

带有参数的 Ruby Proc

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

我正在尝试将参数发送到 Ruby proc

p1 = [54, 21, 45, 76, 12, 11, 67, 5]

qualify = proc { |age, other| age > other }

puts p1.select(&qualify(30))

这是我得到的错误:

undefined method `qualify' for main:Object

age 来自 array 的迭代,我想要最后一个 parameter (30 ) 进入 proc

proc 是用于此目的的正确工具吗?我是 proc 的新手。我不清楚如何在其中获取该 parameter

最佳答案

为了在 select 谓词中使用 qualify,您需要通过部分应用来减少它的数量(接受的参数的数量)。换句话说 - 您需要一个将 other 设置为 30 的新过程。可以用 Method#curry 来完成,但它需要改变参数的顺序:

qualify = proc { |other, age| age > other }
qualify.curry.call(30).call(10)
# => false
qualify.curry.call(30).call(40)
#=> true

我为了能够使用 & 将此 proc 传递给 select,您需要分配它以便它在主对象中可用,例如通过将其分配给实例变量:

@qualify_30 = qualify.curry.call(30)

现在你可以调用:

p1.select{ |age| @qualify_30.call(age)  }
# => [54, 45, 76, 67]

或者:

p1.select(&@qualify_30)
# => [54, 45, 76, 67]

或内联:

p1.select(&qualify.curry.call(30))
# => [54, 45, 76, 67]

关于带有参数的 Ruby Proc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57401127/

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