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")


以上是scala中以下两种模式匹配的情况有什么区别的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>