我有一个数组,我想要第一个块的结果返回一个truthy值(又名,不是nil).问题在于,在我的实际使用案例中,测试有副作用(我实际上是在一组队列上迭代,然后从顶部弹出),所以我不需要在第一次成功之后评估该块.
a,b,c = [1,2,3]
[a,b,c].first_but_value{ |i| (i + 1) == 2 } == 2
a == 2
b == 2
c == 3
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
rib*_*mar 15
break 丑陋= P
如果你想要一个功能方法,你想要一个懒惰的地图:
[nil, 1, 2, 3].lazy.map{|i| i && i.to_s}.find &:itself
# => "1"
Run Code Online (Sandbox Code Playgroud)
如果你不相信它不是在整个阵列中迭代,只需打印出来并看到:
[nil, 1, 2, 3].lazy.map{|i| (p i) && i.to_s}.find &:itself
# nil
# 1
# => "1"
Run Code Online (Sandbox Code Playgroud)
i.to_s由您的块替换.
saw*_*awa 10
[1, 2, 3].detect { |i| i += 1; break i if i == 2 }
# => 2
[1, 2, 3].detect { |i| i += 1; break i if i == 10 }
# => nil
Run Code Online (Sandbox Code Playgroud)
find_yield做你想做的事,查看具有许多核心扩展的 ruby facets,尤其是find_yieldEnumberable 方法:https : //github.com/rubyworks/facets/blob/master/lib/core/facets/enumerable/find_yield.rb
| 归档时间: |
|
| 查看次数: |
4340 次 |
| 最近记录: |