【发布时间】:2021-08-12 09:37:01
【问题描述】:
case class Foo(a: Int, b: Int, c: Int)
val s = Seq(1, 2, 3)
val t = (1, 2, 3)
我知道我可以从元组创建案例类:
Foo.tupled(t)
但是如何从 Sequence 创建案例类?我在序列中有大约 10 个整数元素。
【问题讨论】:
case class Foo(a: Int, b: Int, c: Int)
val s = Seq(1, 2, 3)
val t = (1, 2, 3)
我知道我可以从元组创建案例类:
Foo.tupled(t)
但是如何从 Sequence 创建案例类?我在序列中有大约 10 个整数元素。
【问题讨论】:
一种选择是将相应的 apply 工厂方法添加到伴随对象中
object Foo {
def apply(xs: Seq[Int]): Option[Foo] = {
xs match {
case Seq(a, b, c) => Some(Foo(a, b, c))
case _ => None
}
}
}
Foo(s) // : Option[Foo] = Some(value = Foo(a = 1, b = 2, c = 3))
【讨论】:
这个怎么样?
case class Foo(xs: Int*)
val a = Foo(1,2,3)
val b = Foo(1,2,3,4,5)
val c = Foo((1 to 10).toList: _*)
println(a.xs) // Seq[Int](1,2,3)
println(c.xs) // Seq[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
【讨论】:
case class