在我的core
sbt模塊中,對於矩陣數據類型我有一個特徵Matrix
,並且具有一些工廠方法的特徵MatrixInstance
。同伴對象應該擴展這個特徵。在一個單獨的子模塊中實現伴侶對象/工廠
在一個單獨的子模塊SBT implementation1
,我想實現這個
object Matrix extends MatrixInstance { ... }
伴侶。
這裏的想法是,如果我決定進行第二次實施,庫用戶可以將libraryDependencies += ...
從implementation1
更改爲implementation2
。
但是,這似乎並不奏效。即它看起來像一個對象,它的伴侶必須駐留在同一個模塊(文件?)中。否則,我得到循環依賴和scalac失敗。
是否有任何可用於實現此功能的模式?即爲工廠/伴侶對象定義接口特徵,是否將它在單獨的工件中實現,然後允許用戶通過僅更改libraryDependencies
來在實現之間進行選擇?
像你說的,這是爲了提供擴展型類方法,即功能,而不是數據類型本身。例如,在貓中,你仍然編寫例如'Option(2)'創建數據類型,而不是'option(2)'。我想在這裏改變的是'Option'的實現,而不是它的代數。 – Luciano
我不認爲這是你的建議,但它可能會創建一個擴展原始伴侶對象的類型類。例如'隱式類MatrixImpl1(val companion:Matrix.type){def apply()...}'不知道是否可以工作(即擴展伴侶對象)。 – Luciano