Stream
看个简单的例子, 如何制造一个 stream 源, 并且用 reduce_while 来提取数据.
计算自然数集合中数字的和, 直到遇到不满足条件的数.
fn_start = fn -> 1 end
fn_next = fn
x -> {[x], x+1}
end
fn_after = fn _ -> :ok end
handler = fn limit ->
fn x, acc ->
if limit.(x) do
{:cont, x + acc}
else
{:halt, acc}
end
end
end
natures = Stream.resource(fn_start, fn_next, fn_after)
sum = fn res, limit ->
res
|> Enum.reduce_while(0, handler.(limit))
end
natures |> sum.(&(&1 <= 5))
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。