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

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

模式的種類(二)

構(gòu)造器模式

構(gòu)造器模式功能非常強(qiáng)大,比如一個(gè)構(gòu)造器模式可以定義為 BinOp(“+”,e,Number(0))。它由一個(gè)名稱 BinOp(某個(gè) case class 的名稱)和一系列有括號分開的模式構(gòu)成(“+”,e 和 Number(0))。這個(gè)模式首先檢查輸入對象是否是 BinOp 類型的對象,然后檢查構(gòu)造器參數(shù)是否匹配輸入的對象。

這些額外的模式表示 Scala 支持深度匹配,這些模式不僅僅檢查最高層次的匹配,并且檢查其內(nèi)部內(nèi)容的匹配,同時(shí)這些額外的模式自身還可以說構(gòu)造器模式,因此你可以構(gòu)造嵌套任意層次的構(gòu)造器模式。 比如

    expr match{
        case BinOp("+",e,Number(0)) => println(" a deep match")
        case _ =>
    }

它的第三個(gè)參數(shù) Number(0) 自身也是一個(gè)構(gòu)造器模式,其參數(shù)又匹配 0,因此有三個(gè)層次的匹配。

序列模式

你也可以匹配如 List 和數(shù)組等序列類型的數(shù)據(jù)。和匹配 case class 語法類似,但你可以指明序列中任意數(shù)量的元素。比如:

下面的例子匹配含三個(gè)元素,其中首元素為 0 的列表:

    scala> List(0,2,4) match{
     | case List(0,_,_) => print ("found it " )
     | case _ =>
     | }
    found it 

如果你需要匹配一個(gè)未指明長度的序列,可以使用“_*” 作為模式的后一元素,這個(gè)“_*” 可以匹配任意數(shù)目的元素(包括 0 個(gè)元素)

    expr match{
      case List(0,_*) => print ("found it")
      case _ =>
      }

多元組模式

除序列外,你可以匹配多元組,比如:

    scala> def tupleDemo(expr:Any) =
     | expr match{
     |   case (a,b,c) => print("matched " + a +":" +b +":"+c )
     |   case _ =>
     | }
    tupleDemo: (expr: Any)Unit

    scala> tupleDemo(2,3,4)
    matched 2:3:4