scala模式匹配

以下是常见的scala模式匹配实例。


variableName @ pattern

下面这个示例

abstract class A; // sealed abstract class A
case class B(a:Int) extends A;
case class C(a:Int) extends A;
case class D(a:Int) extends A;

val a:A = B(1);

a match {
 case e @ B(_) => println(e)
 case e @ C(_) => println(e)
}

模式匹配中case e @ B(_)就是模式匹配别名形式,实际匹配的模式是B(_),用变量e来等价替代,实际效果与case e : B是一样的。

再多说一句,抽象类A可以用sealed修饰。修饰后,表明A的子类只能在A类所在的文件内声明,不可以在文件外,这也正是sealed的封装之意。另外,模式匹配时编译器会强行检查是否已经匹配到了所有可能情况,若没有,会给出编译警告!

参考 Scala的sealed关键字

你可能感兴趣的:(scala模式匹配)