2013-01-16 33 views
2

我只是剛剛開始在Scala中,想知道是否可以創建一個具有不可變屬性和默認值的類,並且我們可以啓動在構造函數中傳遞任何屬性值:缺少參數的調用構造函數

因此,例如在JavaScript中以下是可能的(最終結果不會是一成不變的,但你的想法):

var myObj = function(params){ 
    this.a = params.a || 'default a'; 
    this.b = params.b || 'default b'; 
    this.c = params.c || 'default c'; 
}; 

new myObj({c:'override c', b:'override b'}); 

,我會得到我的新對象,使用默認值和新構造b和c屬性...正如你所看到的,這裏的構造函數以任意順序接受任意數量的對象屬性。

因此,採取一個非常簡單的例子,在斯卡拉:

case class Customer(
    val id: Long = 0, 
    val name: String = "" 
) 

我知道我能做到這一點:

val customer = Customer(0, "company") 

,但我想這樣做:

val customer = Customer{ name = "company" } 

所以我最終沒有50個構造函數。

可能嗎?怎麼樣?

回答

6

你不需要傳遞一個哈希,就像在javascript中一樣,只需將值賦給構造函數中的參數即可。這被稱爲「命名參數」,看起來像這樣:Customer(name = "Peter")

+0

+1這很容易......謝謝! – karlipoppins

相關問題