我刚刚开始使用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个构造函数。
有可能吗?怎么样?
答案 0 :(得分:6)
您不需要像在javascript中那样传递哈希值,而只需将值分配给构造函数中的参数。这称为“命名参数”,如下所示:Customer(name = "Peter")