博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
话说模式匹配(5) for表达式中的模式匹配
阅读量:6293 次
发布时间:2019-06-22

本文共 1313 字,大约阅读时间需要 4 分钟。

在for表达式中

for(x <- collection) { balabala }

直觉上以为 x 就是个用于迭代每一个元素的局部变量。

我们看一些例子:

scala> for(i <- List(1,2,3) ) {println(i)}// 看看语法树  scala> tb.parse("for(i <- List(1,2,3) ) {println(i)}")res2: tb.u.Tree = List(1, 2, 3).foreach(((i) => println(i)))

再多一点花样,变量绑定:

scala> tb.parse("for(i@2 <- List(1,2,3) ) {println(i)}")res3: tb.u.Tree =    List(1, 2, 3).withFilter(((check$ifrefutable$1) => check$ifrefutable$1: @scala.unchecked match {        case (i @ 2) => true        case _ => false     })).foreach(((x$1) => x$1: @scala.unchecked match {    case (i @ 2) => println(i)}))

将i绑定到常量模式2上,List(1,2,3)中只有2能匹配

下一个例子:

// 过滤出女性的名字scala> for ((name,"female") <- Set("wang"->"male","zhang"->"female") ) print(name)zhang

会在两个点做模式匹配,第一个点是从Set中过滤符合条件的元素时,第二个点是对过滤后的集合迭代执行后续逻辑时。

scala> tb.parse("for ((name,\"female\") <- Set(\"wang\"->\"male\",\"zhang\"->\"female\") ) print(name)")res5: tb.u.Tree =Set("wang".$minus$greater("male"), "zhang".$minus$greater("female")).withFilter(((check$ifrefutable$2) => check$ifrefutable$2: @scala.unchecked match {    case scala.Tuple2((name @ _), "female") => true    case _ => false})).foreach(((x$2) => x$2: @scala.unchecked match {    case scala.Tuple2((name @ _), "female") => print(name)}))

同样,还可以类型模式在从集合过滤时按类型条件。

scala> for((k,v:Int) <- List(("A"->2),("B"->"C"))) {println(k)}A
文章转自 

转载地址:http://ejtta.baihongyu.com/

你可能感兴趣的文章
dojo.mixin(混合进)、dojo.extend、dojo.declare
查看>>
Python 数据类型
查看>>
iOS--环信集成并修改头像和昵称(需要自己的服务器)
查看>>
PHP版微信权限验证配置,音频文件下载,FFmpeg转码,上传OSS和删除转存服务器本地文件...
查看>>
教程前言 - 回归宣言
查看>>
PHP 7.1是否支持操作符重载?
查看>>
Vue.js 中v-for和v-if一起使用,来判断select中的option为选中项
查看>>
Java中AES加密解密以及签名校验
查看>>
定义内部类 继承 AsyncTask 来实现异步网络请求
查看>>
VC中怎么读取.txt文件
查看>>
如何清理mac系统垃圾
查看>>
企业中最佳虚拟机软件应用程序—Parallels Deskto
查看>>
Nginx配置文件详细说明
查看>>
怎么用Navicat Premium图标编辑器创建表
查看>>
Spring配置文件(2)配置方式
查看>>
MariaDB/Mysql 批量插入 批量更新
查看>>
ItelliJ IDEA开发工具使用—创建一个web项目
查看>>
solr-4.10.4部署到tomcat6
查看>>
切片键(Shard Keys)
查看>>
淘宝API-类目
查看>>