当我使用保持自己成员的课程时,有什么值得注意的吗?
这是有效的(它来自Scala-IDE中的Scala工作表),但这会让我在某些方面受到伤害,即这是正常的做法还是不好的做法以及为什么?
object Play {
println("Playing a bit") //> Playing a bit
case class X(a: Int = 1, x: List[X]){
}
val y = X(3, List()) //> y : Play.X = X(3,List())
val z = X(5, List(X(6, List()))) //> z : Play.X = X(5,List(X(6,List())))
println(z) //> X(5,List(X(6,List())))
println(z.x.head.a) //> 6
}
答案 0 :(得分:3)
这是一个完美的案例类使用。案例类非常适合定义像这样的递归结构。
例如,如果我想定义自己的链表类,我可以使用案例类来简化模式匹配功能:
trait MyList[T]
case class Link[T](head: T, tail: MyList[T]) extends MyList[T]
case class End[T]() extends MyList[T]
@tailrec
def last[T](list: MyList[T]): Option[T] =
list match {
case End() => None
case Link(head, End()) => Some(head)
case Link(head, tail) => last(tail)
}
println(last(Link(1, Link(2, Link(3, End()))))) // Some(3)
println(last(Link(1, End()))) // Some(1)
println(last(End())) // None