【发布时间】:2012-05-15 09:51:14
【问题描述】:
我认为这可以通过一个例子来更好地解释
我有以下案例类
case class Person(name: String = "no name", surname: String = "no surname")
我想创建一个通用函数来填充它,例如,一个 json 消息,它可能不会指定所有字段
我知道要使用默认值,简单的答案是不要将它们传递给构造函数,但是如果我有几个字段可能会出现在 json 中,也可能不会出现,我应该使用一个巨大的 switch 语句覆盖每个可能的缺失参数组合。在这种情况下,在阅读完json之后,我应该注意name & surname present,no name,no surname and no name or surname case...(哎呀,我希望我说清楚了)。
更准确地说,我正在尝试开发一个函数,允许我从以下 json 值创建一个人,当缺少某些参数时使用默认值
{ "name": "john", "surname": "doe" }
{ "surname": "doe" }
{ "name": "john" }
{ }
这就是为什么我正在寻找一种更通用的方法来处理这个问题。
(我将展示一些伪代码来说明我想要实现的目标)
我在想这样的事情:
val p = Person(name= "new person name", surname= Unit)
在这种情况下 surname 应该得到默认值
或者类似的东西
val p = Person( Map( "name" -> "new person name" ) _* )
这样它也采用默认的姓氏
或者也许在构造函数中这样做,如果我检测到一个空值(或无),我可以分配默认值。
其实我是在尽量避免重复默认值的定义。
无论如何,实现这样的事情最惯用的方法是什么?
【问题讨论】:
标签: scala constructor default-value