我有一个带有选项参数的案例类,让我们说:
case class Student(id: Option[Int], name: String)
要获取学生实例,我不仅可以使用Student(Some(1), "anderson")
,还希望此表单是有效的Student(2,"Sarah")
我想我必须创建一个Int => Option[Int]
并将其放在某处。那么最好的方法是什么?
更新
正如评论中所述,覆盖apply
方法将阻止通过Student.apply _
答案 0 :(得分:9)
在随附apply
中制作object
方法可能更容易。
case class Student(id: Option[Int], name: String)
object Student {
def apply(id: Int, name: String): Student = {
Student(Some(id), name)
}
}
答案 1 :(得分:1)
使用隐式转换的替代解决方案:
implicit def intToOption(x: Int) = Some(x)
case class Student(id: Option[Int], name: String)
scala> Student(1,"Nu")
res1: Student = Student(Some(1),Nu)