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关键字

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容