2011-05-03 25 views
0

我正要使用具有命名默認參數的情況類作爲構建器。舉個簡單的例子:使用命名默認參數的情況與方法構建器

case class Person(name:String) 
case class PersonBob(name:String = "Bob") { 
    def build = Person(name) 
} 
val casePerson = PersonBob("case").build 

但我可以使用方法,以及:

object Builder { 
    def personBob(name:String = "Bob"):Person = Person(name) 
} 
val methodPerson = Builder.personBob("method") 

一些權衡:

  • 方法方法無需爲每個建設者的對象.. 。節省的週期和內存。
  • 方法方法有一些精簡的實現代碼。對使用語法沒有好處。
  • 方法無法作爲參數傳遞給「構建器組合」的其他構建器。函數可以,但是我們在這裏討論方法,因爲函數不支持參數默認值。
  • 案例類方法允許我堅持構建器實例(現在不需要)。
  • 案例分類方法將有助於在某個時候構建內部DSL--但我認爲外部DSL對兩種方法都是矛盾的。

其他注意事項?以另一種方式建造一個更好的建設者?

+0

沒有理由對您給出的示例使用構建器,只需簡單的工廠方法即可。如果您需要更復雜的對象構建,請提供您需要執行的示例。 – 2011-05-04 07:32:50

回答

0

我很困惑:不是你在這裏需要的所有需要​​烘焙的類工廠,還是我缺少一些東西。 IOW:

scala> case class Foo(bar:String="ab") 
defined class Foo 

scala> val f = Foo() 
f: Foo = Foo(ab) 

scala> f.bar 
res2: String = ab 
+0

在這種情況下,我從另一個庫中的類構建域對象,這是我無法改變的。所以我必須建立獨立的建設者。 – eptx 2011-05-03 23:18:55

相關問題