2011-04-23 46 views

回答

12

通常,我將語義上不同的效用函數放入不同的特徵中,併爲每個特徵創建一個對象,例如,

trait Foo { 
    def bar = 1 
} 
object Foo extends Foo 

這樣我就很靈活。我可以在類聲明中通過import聲明或通過with導入效用函數。此外,我可以很容易地將不同的實用特徵組合到一個新的對象中,以簡化最常用的實用功能的輸入語句,例如,

object AllMyUtilites extends Foo with Foo2 
+1

我認爲'with'是一種不好的做法,因爲它會污染類型,給予較少的靈活性(您可以跳過並重命名爲'import's),並且您從不需要您的類也是實用程序類,只有當您組你的公用事業。所以,我會留下'對象'或只使用'with'來進行分組。 – Tvaroh 2014-01-23 22:36:54

+0

這真是太好了,我在想是否有特質或物體,但你可以有_both_! =) – dividebyzero 2016-06-23 20:52:37

2

特性,如果你希望它們與要使用它的類混在一起。對象,如果你只想導入它們。

+0

如果你有針對不同操作系統的效用函數,那麼將它們作爲特徵不是更好嗎?這樣一些行爲可以繼承? – Geo 2011-04-23 11:38:07

+0

@Geo,你的意思是?與不同實現(每個操作系統一個)有相同的界面?那麼它不僅僅是效用函數,更多的是設計問題(也許是一個需求)。 – pedrofurla 2011-04-23 12:52:18

7

包對象或只是普通的對象。例如,參見Scala.Predefscala.math

+0

如果您想利用亞型polymorphysm,該怎麼辦? – 2017-11-22 09:05:30