根据Ruby Hash / Array文档,如果没有给出块,delete_if
方法返回一个枚举器。这有用吗?有人可以举例说明这种模式吗?
答案 0 :(得分:8)
Enumerator
上定义了一些为迭代器提供灵活性的方法。我经常使用的一种方法是with_index
。
p %w[a b c d e f].delete_if.with_index{|_, i| i.even?}
# => ["b", "d", "f"]
如果要在没有Enumerator
类的情况下完成此操作,则必须定义所有类型的方法,包括delete_if_with_index
,这不是一件好事。
答案 1 :(得分:3)
枚举器只允许您稍后运行该块。例如,如果您有一个专门处理删除的方法,如果有几个不同的对象,您可以将它传递给枚举器。
在下面的示例中,它将打印 1,3,5
arr = [0,1,2,3,4,5]
enumerator = arr.delete_if
enumerator.each { |el| el.even? }
puts arr.join(', ')