如何從scala集合中檢索生成器,使其不可知關於它的實現?我將參數類型限制爲TraversableLike的後代,但它的newBuilder方法受到保護,我無法從外部調用它。從scala集合中檢索生成器
回答
生成器通過CanBuildFrom
隱式的,這是以下參數的基礎上,自動解決的使用檢索到:
- 輸入集合
- 類型輸入集合的所述的類型的元素
- 合適的輸出集合類型。
例如,如果你在一個列表[INT]返回_.toString
進行映射,CanBuildFrom
看起來如下:
CanBuildFrom[List,Int,List[String]]
您應該依靠相同的機制來動態檢索你需要的正確建設者。
代碼片段將有助於提供一些上下文。你提到「參數類型」...
無論聲明這個參數,它是否有類型參數Repr
?像
def mysteryMethod[A, Repr](arg: TraversableLike[A, Repr]): Builder[A, Repr]
假設,你可以做這樣的事情:
import collection.TraversableLike
import collection.mutable.Builder
import collection.generic.CanBuildFrom
def mysteryMethod[A, Repr](arg: TraversableLike[A, Repr])(implicit
cbf: CanBuildFrom[Repr, A, Repr]): Builder[A, Repr] = cbf.apply
val t: TraversableLike[Int, Vector[Int]] = Vector(1, 2)
val builder = mysteryMethod(t)
builder += 3
builder += 4
builder.result //> res2: Vector[Int] = Vector(3, 4)
scala.collection.generic.CanBuild是一個更好的類型因爲mysterymethod成爲'def mysteryMethod [A,B](xs:TraversableLike [A,B])(隱式cb:CanBuild [A,B]):Builder [A,B] = cb() ' – 2013-03-20 06:19:13
@AndreasFlierl,謝謝,看起來更乾淨。因爲我不知道請求者在做什麼,所以我會留下我的答案。 – huynhjl 2013-03-20 06:25:41
- 1. 如何在Scala中生成一組集合的功率集合
- 2. ScalaCheck集合生成器
- 3. 從scala生成.jar
- 4. Mongoose:從集合中檢索ObjectIds數組
- 5. 從集合中檢索lambda表達式
- 6. java從集合中檢索對象
- 7. 從集合中檢索數組
- 8. 從集合檢索日後在Java中
- 9. 無法從集合中檢索數據
- 10. 從流星集合中檢索數據
- 11. Backbone.js:從集合中生成JSON數組
- 12. 從羣集中檢索成員(葉子)
- 13. 生成動態SQL其中來自Scala的集合
- 14. Backbone.js:從PHP中的服務器檢索集合
- 15. 從RavenDB檢索整個數據集合
- 16. 使用集合集合生成XML
- 17. 從Scala源生成UML圖
- 18. 從純scala塊生成html
- 19. Scala集合串
- 20. 從數據庫生成隨機集合
- 21. Scala的類型類派生的集合
- 22. 從Scala編譯器插件生成Scala代碼樹
- 23. 生成日期的集合從對象集合
- 24. 從Scala中的WrappedArray檢索數據
- 25. scala c集成
- 26. 從集合中生成所有可能的有序子集
- 27. cakephp3.0查詢生成器檢索數據
- 28. Scala中的日誌生成器對象
- 29. scala:從列表中生成元組
- 30. 從Smalltalk中的集合生成所有組合
如果你的代碼示例,我將完成我的答案有一個代碼片段 – Edmondo1984 2013-03-20 06:14:13