我已经编写了一个简单的Stream.unfold函数,当我像这样调用它时,它工作得很好:
a = Stream.unfold({1,2,3}, &my_unfold_func) |> Stream.take(5)然而,我似乎找不到一种方法来实现一个包装器,允许我直接调用我的函数,例如:
a = my_unfold_wrapper() |> Stream.take(5)我试过的是:
def my_unfold_wrapper(), do: Stream.unfold({1,2,3}, &my_unfold_func)当我运行这段代码时,我得到了错误:
#Stream<[enum: #Function<35.27730995/2 in Stream.unfold/2>,
funs: [#Function<38.27730995/1 in Stream.take/2>]]>
[Finished in 0.7s]问题似乎是Stream.take()返回了另一个流,我需要执行该流才能将其转换为数组。用Enum.take替换Stream.take似乎可以做到这一点,这就留下了如何执行流的问题。
发布于 2016-09-17 23:23:01
我想我已经破解了,算是吧。下面的代码实现了我想要的功能:
Foobar.my_unfold_wrapper()
|> Stream.take(10)
|> Stream.into(File.stream!("output.txt", [:write, :utf8]))
|> Stream.run我现在遇到的唯一问题是输出被连接到一个巨大的行上--这是我在另一个单独的SO问题中提出的问题。
https://stackoverflow.com/questions/39546647
复制相似问题