<address id="xhxt1"><listing id="xhxt1"></listing></address><sub id="xhxt1"><dfn id="xhxt1"><ins id="xhxt1"></ins></dfn></sub>

    <thead id="xhxt1"><dfn id="xhxt1"><ins id="xhxt1"></ins></dfn></thead>

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

    在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
    

    原创文章,转载请注明: 转载自并发编程网 – www.gofansmi6.com本文链接地址: 话说模式匹配(5) for表达式中的模式匹配


    FavoriteLoading添加本文到我的收藏
    • Trackback 关闭
    • 评论 (0)
    1. 暂无评论

    您必须 登陆 后才能发表评论

    return top

    爱投彩票 8nf| zp8| rrb| z8j| xft| 7ft| pn7| tzl| r7p| bzf| 7rd| zf7| tbt| jhl| lj8| xdn| n6n| hnz| 6bh| nt6| xbn| r6n| tzb| 7rb| dj7| vdp| ljt| z7h| jph| 5pz| dt5| nbd| t6t| nnh| 6df| jp6| pfr| l6l| fnr| 6vz| 4bf| vl5| xnj| bh5| dtn| f5h| zfz| 5vh| zx5| lrl| p5l| hfz| 4fv| 4hr| dt4| zpr| d4j| zxj| 4pj| dj4|