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

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

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

我知道我可以这样做:

val customer = Customer(0, "company")

但我想这样做:

val customer = Customer{ name = "company" }

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

可能吗?如何?

4

1 回答 1

6

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

于 2013-01-16T20:00:27.330 回答