我有一个数组,我想要返回真值(也称为非零)的第一个块的结果。问题是,在我的实际用例中,测试有副作用(我实际上是在一组队列上迭代,并从顶部弹出),所以我不需要在第一次成功之后评估该块。
a,b,c = [1,2,3]
[a,b,c].first_but_value{ |i| (i + 1) == 2 } == 2
a == 2
b == 2
c == 3
有任何想法吗?
break
很丑=P
如果你想要一个函数式方法,你需要一个惰性映射:
[nil, 1, 2, 3].lazy.map{|i| i && i.to_s}.find &:itself
# => "1"
如果您不相信它没有在整个数组中进行迭代,只需打印出来并查看:
[nil, 1, 2, 3].lazy.map{|i| (p i) && i.to_s}.find &:itself
# nil
# 1
# => "1"
Replace i.to_s
在你的街区。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)