我看到 Ruby 1.9 有一个新的 enumerator,名为
特别是当它接受一个
例如,我想将一个数字数组拆分成多个子数组,每当元素的累加和超过某个值时就进行拆分:
我觉得这个总和就像是“进位”或“备忘”,类似于
这段代码的故障是一个晦涩的错误:
slice_before
。然而,API 文档 中描述比较晦涩难懂。特别是当它接受一个
initial_state
值时,我感到有些困惑。例如,我想将一个数字数组拆分成多个子数组,每当元素的累加和超过某个值时就进行拆分:
a = [1,2,0,1,2,3]
a.slice_before(0) do |elem, sum|
sum += elem
sum > 3
end.to_a
预期输出:
[[1,2,0], [1,2], [3]]
我觉得这个总和就像是“进位”或“备忘”,类似于
inject
函数,但貌似行不通。这段代码的故障是一个晦涩的错误:
TypeError: can't dup Fixnum
from (irb):43:in `each'
看来slice_before
不接受Fixnum
作为初始值。为什么?是Ruby的bug吗?
我可以通过保留自己的状态变量来解决这个问题,但这并不是我所期望的优美的Ruby语义。
sum = 0
a.slice_before do |elem|
sum += elem
sum > 3 && sum = 0
end.to_a
# => [[1, 2, 0], [1, 2], [3]]
那么initial_state
是否可用于此目的呢?文档中的示例似乎主要是关于文本处理的。我正在使用Ruby 1.9.3p194。