【发布时间】:2011-09-18 23:37:43
【问题描述】:
试图使用一个构思不当的框架,该框架从传入的块中收集结果列表,实际上是这样的:
def sigh(&block)
r = (1..3).collect do |i|
yield(i)
end
# do something with r
end
我希望我传入的块来过滤项目,但要跳过集合迭代,而不是像next那样将nil添加到结果中(因为框架不紧凑他们。)除了修补 gem 之外,还有什么简单的方法?即,
sigh {|i| next unless i == 1 } # results in [1,nil,nil] rather than just [1]
【问题讨论】:
-
我感觉到你的未来有一个猴子补丁
-
简单的“sigh { |i| next 除非 i == 1 }.compact”有什么问题?太冗长了?
-
我需要将一个块传递给框架方法
sigh,该方法过滤框架随后作用的结果。在结果中包含nil。 -
我现在看到了被问到的内容。我想不出办法。
break将在此时从整个方法中逃脱。 -
@Wayne:除非它是开源 gem,否则最好的猴子补丁可能是拉取请求。
标签: ruby iteration block yield next