1

ruby中第一次找出函数 F 在值集 A1、A2、A3、...上为真时的最佳方法是什么?如果它们都没有将 F 变为true,则返回nil

详细说明:假设

F(A1)=false, F(A2)=false,  F(A3)=true, ...

我需要的是返回 A3 并且程序退出而不将函数 F 应用于剩余值 A4、A5、...

可以在嵌套if-else条件的帮助下做到这一点,但对于一长串值 A1、A2、...... 这似乎太乏味了。

4

2 回答 2

3

您可以利用Enumerable#detect返回集合中为真的第一个条目。

就像是:

def check(arg)
  arg == true
end

result = [false, true, true].detect do |n|
  puts "checking: #{n}"
  check(n)
end

你会看到它的输入[false, true, true]会产生:

checking: false
checking: true

所以它在返回 true 的第二次迭代后停止运行。

于 2013-06-05T21:51:19.317 回答
2

如果值在列表中,您可以使用以下Enumerable#detect函数:

my_stuff.detect { |item| F(item) }

编辑:我最初建议mapand any?,但另一个答案Enumerable#detect似乎最好。更改了示例代码以反映这一点。

于 2013-06-05T21:53:37.053 回答