在案例类中将参数Option [T]隐式转换为T.

时间:2015-08-27 16:14:32

标签: scala implicit-conversion

我有一个带有选项参数的案例类,让我们说:

case class Student(id: Option[Int], name: String)

要获取学生实例,我不仅可以使用Student(Some(1), "anderson"),还希望此表单是有效的Student(2,"Sarah")

我想我必须创建一个Int => Option[Int]并将其放在某处。那么最好的方法是什么?

更新

正如评论中所述,覆盖apply方法将阻止通过Student.apply _

来调用它

2 个答案:

答案 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)