在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Scala/ 模式限定修飾
模式的種類(三)
模式限定修飾
簡(jiǎn)單的示例
模式的種類(二)
模式無處不在
模式的種類(四)
Sealed Classes
Option 類型
重疊模式定義
模式的種類(一)

模式限定修飾

有些時(shí)候,需要對(duì)定義的模式做某些限制,比如你需要完成表達(dá)式簡(jiǎn)化,比如兩個(gè)相同的參數(shù)相加 e+e ,你想把它簡(jiǎn)化為 e*2。也就是

    BinOp("+",Var("x"),Var("x"))  

轉(zhuǎn)化為

    BinOp("\*",Var("x"),Number(2))

你可能試著這么定義規(guī)則:

    def simplifyAdd(e:Expr) =e match{
        case BinOp("+",x,x) => BinOp("*",x,Number(2))
        case _ =>
    }

但是編譯器會(huì)報(bào)錯(cuò):

    <console>:13: error: x is already defined as value x
       case BinOp("+",x,x) => BinOp("*",x,Number(2))

告訴你變量 x 已經(jīng)定義過了,也是模式中定義的變量名只能定義一次,那么此時(shí)就可以借助于限制修飾,我們重新定義如下:

    def simplifyAdd(e:Expr) =e match{
        case BinOp("+",x,y) if x==y => BinOp("*",x,Number(2))
        case _ =>
    }

模式的限定修飾為一 if 語句,if 語句可以使用任意的布爾表達(dá)式,通常這個(gè)布爾表達(dá)式對(duì)前面定義的模式變量進(jìn)行了限制。也就是只有在條件滿足的且滿足模式匹配時(shí),才執(zhí)行=>后面的表達(dá)式。

測(cè)試如下:

    scala> simplifyAdd(BinOp("+",Var("x"),Var("x")))
    res0: Any = BinOp(*,Var(x),Number(2.0))