长生不老药:在列表的元素上获得一个流



注意:这个问题是在假设Streams的行为与其他语言中的迭代器类似的情况下编写的。正如公认的答案所说,它不能以这种方式工作,因为这需要可变的状态!所以你真的没有任何理由想要这样做。

原始问题

我正在学习Elixir,有一个我认为很简单的问题:在Elixir中,有没有一种惯用的方法可以让流通过列表?

Stream模块中有很多功能我可以(ab(用来实现:

mylist = [1,2,3]
stream1 = Stream.map(mylist, fn x -> x end)
stream2 = Stream.concat([mylist])
# etc. etc.

但到目前为止,我还没有找到任何特定用途的东西——我期待着Python中的iter(list)或Rust中的vec.into_iter()。长生不老药有这样的东西吗?或者,这是不是一件非Elixirian*的事情?

*是";埃利贤"quot;Elixery"quot;Elixious"?

要使iter像在python/rust中那样工作,需要在迭代器本身中保持一个状态。长生不老药是完全不变的,不允许这样。

根据任务的不同,它可能以不同的方式实现。如果需要迭代整个集合,Stream本身可能被视为迭代器,一般来说,不可能暂停、做其他事情并继续使用迭代器工作,因为迭代器无法保持当前状态。

如果你要分享你试图解决的真正任务,我们会想出惯用的灵丹妙药。查看Stream.run/1Enum模块中的所有终止函数,了解如何处理流中的元素。

最新更新