调用缺少参数的构造函数

时间:2013-01-16 19:55:58

标签: scala properties constructor

我刚刚开始使用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属性构建我的新对象...正如您所看到的,这里的构造函数以任何顺序接受任意数量的对象属性。

所以在Scala中举一个非常简单的例子:

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

我知道我可以这样做:

val customer = Customer(0, "company")

但我想这样做:

val customer = Customer{ name = "company" }

所以我最终没有50个构造函数。

有可能吗?怎么样?

1 个答案:

答案 0 :(得分:6)

您不需要像在javascript中那样传递哈希值,而只需将值分配给构造函数中的参数。这称为“命名参数”,如下所示:Customer(name = "Peter")