scala中以下两种模式匹配的情况有什么区别
sealed trait User
case class ExternalUser(name: String, email: String) extends User
case class InternalUser(tag: String, email: String) extends User
val user: User = ...
user match {
case u: ExternalUser =>
println(s"${u.name}")
case InternalUser(tag, email) =>
println(s"${tag}")
}
我什么时候应该使用一个来反对另一个,为什么。
回答
当涉及到案例类时,两者可以互换使用。
如果您更喜欢引用匹配的ExternalUser值本身,那么第一种方法更有意义,因为您可以通过u.
如果您更喜欢将整个案例类取消应用到其部分(标签、电子邮件等)中,那么第二种方法更有意义,因为您不必通过u.
如果你更喜欢使用第二种方法,但你仍然想持有对整个案例类的引用,你也可以这样做:
case u @ InternalUser(tag, email) =>
println(s"$u $tag $email")