たとえば、次のケース クラスがあります。
case class Student (firstName : String, lastName : String)
このケース クラスを使用する場合、ケース クラス内のフィールドへのデータの提供はオプションである可能性はありますか? たとえば、次のようにします。
val student = new Student(firstName = "Foo")
ありがとう!
たとえば、次のケース クラスがあります。
case class Student (firstName : String, lastName : String)
このケース クラスを使用する場合、ケース クラス内のフィールドへのデータの提供はオプションである可能性はありますか? たとえば、次のようにします。
val student = new Student(firstName = "Foo")
ありがとう!
あなたは近かった:
case class Student (firstName : String = "John", lastName : String = "Doe")
val student = Student(firstName = "Foo")
別の可能性は、部分的に適用された関数です。
case class Student (firstName : String, lastName : String)
val someJohn = Student("John", _: String)
//someJohn: String => Student = <function1>
val johnDoe = someJohn("Doe")
//johnDoe: Student = Student(John,Doe)
最後に、いくつかのデフォルト オブジェクトを作成してから、いくつかのフィールドを変更します。
val johnDeere = johnDoe.copy(lastName="Deere")
//johnDeer: Student = Student(John,Deere)
デフォルト情報なしで 2 番目のパラメーターを見逃したいだけの場合は、Option
.
case class Student(firstName: String, lastName: Option[String] = None)
次の方法でインスタンスを作成できます。
Student("Foo")
Student("Foo", None) // equal to the one above
Student("Foo", Some("Bar")) // neccesary to add a lastName
必要に応じて使用できるようにするために、暗黙的に追加します。
object Student {
implicit def string2Option(s: String) = Some(s)
}
これで、次の方法で呼び出すことができます。
import Student._
Student("Foo")
Student("Foo", None)
Student("Foo", Some("Bar"))
Student("Foo", "Bar")