人們是否真的在生產代碼中使用Scala的Stream類,還是主要關注學術興趣?產品代碼流
產品代碼流
回答
有沒有問題Stream
,除非人們用它來代替Iterator
- 而不是替代List
,這是最相似的集合。在這種情況下,人們在使用時必須小心。另一方面,使用Iterator
也必須小心,因爲每個元素只能迭代一次。
那麼,既然都有自己的問題,爲什麼單挑出來Stream
的?我敢說,人們習慣於Java的Iterator
,而Stream
是一個功能性的東西。
好吧,Stream似乎有它的問題,比如在reduceLeft中使用時。 – 2011-03-20 08:46:14
這個問題很多很好的答案;這對我來說是最有幫助的,因爲我不太喜歡像使用List而不是迭代器那樣使用它是正確的方法。感謝所有回覆的人。 – 2011-03-25 13:03:59
是的,我用它,但它往往是這樣的:
(as.toStream collect expensiveConversionToB) match {
case b #:: _ => //found my expensive b
case _ =>
}
當然,我可能會使用一個非嚴格的觀點,並在這個例子中
我猜測是什麼促使我認識到Stream在內存使用方面非常脆弱,除非沒有其他方式,否則我會不寒而慄在生產代碼中找到它。 – 2011-03-19 20:34:59
一個find
由於唯一不使用Stream
的理由是,確保JVM不保留對早期論點的引用可能非常棘手,我使用的一種方法相當不錯,就是建立一個Stream
並立即將其轉換爲Iterator
實際使用。在使用方面它會失去一點Stream
的好特性,特別是在回溯方面,但是如果你只想對結果進行一次傳遞,那麼通過這種方式構建結構往往比扭曲進入hasNext
/next()
模型Iterator
直接。
即使我寫了Iterator is what I want to use nearly all the time我確實在生產代碼中使用了Stream
。我只是不會自動假定這些細胞是垃圾收集的。
有時候Stream
完全適合這個問題。我認爲API給some good examples其中遞歸參與...
感謝您提供其他問題的鏈接,非常有幫助。 – 2011-03-19 20:32:58
Look here。本博客文章介紹瞭如何使用Scala Streams(以及內存映射文件)高效地讀取大文件(1-2G)。
我還沒試過,但解決方案看起來很合理。 Stream在低級別API的基礎上提供了一個很好的抽象,用於將內存映射文件處理爲一系列記錄。
「Stream」讓你問這個問題有什麼特別之處?爲什麼不能在生產代碼中使用它? – Madoc 2011-03-19 16:07:42
很容易耗盡人體內存。我似乎還記得,它的實施正在顯示它的年齡。所以我只是很好奇人們是否真的將它用於歐拉項目之外的事情。 ;) – 2011-03-19 16:10:41