zl程序教程

您现在的位置是:首页 >  其它

当前栏目

话说模式匹配(5) for表达式中的模式匹配

for 表达式 模式匹配
2023-09-11 14:16:10 时间
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)}

文章转自 并发编程网-ifeve.com