2013-01-16 31 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

相关问题