我需要创建一个带有可选字段的案例类。我指的是Case Classes with optional fields in Scala
case class Student(firstName: String, lastName: Option[String] = None)
case class Student1(firstName: String,addd:String,lastName: Option[String] = None,surname:Option[String] = None)
初始化它的方法,除了使用Some("Bar")
来初始化它之外,还有其他任何方式有效的方式,因为我有很多字段apporx到15。
Student("Foo")
Student("Foo", None) // equal to the one above
Student("Foo", Some("Bar"))
print(Student1("Foo","abc",None,Some("abc")))
,我想要一个
替代无
如果我们遍历字段
println(Student("Foo").productIterator.mkString("\n"))
打印
Foo
None
我想删除无
答案 0 :(得分:1)
对于1,2,我认为您可以使用名称和值来设置Option
字段并跳过您不想设置的字段,例如:
Student1("firstname", "add", surname = Some("foo"))
对于3,我认为您可以使用过滤器来跳过None
字段,例如:
s.productIterator.filter(_ match {
case None => false
case _ => true
}).mkString(" ")
答案 1 :(得分:0)
1 - 重载apply()
方法。
object Student{
def apply(fn: String, ln: String) = new Student(fn, Option(ln))
}
Student("bob", "jones") // res0: Student = Student(bob,Some(jones))
Student("ann") // res1: Student = Student(ann,None)
2 - 无法完成。
3 - 覆盖toString
方法。
case class Student(firstName: String, lastName: Option[String] = None) {
override def toString:String =
"Student(" + firstName + lastName.fold("")(",".+) + ")"
}
Student("bob", "jones") // res0: Student = Student(bob,jones)
Student("ann") // res1: Student = Student(ann)