日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
學習Scala中的Case類

編輯推薦:Scala編程語言專題

Scala支持case類的概念。case類也是正規(guī)的類,暴露其構造器參數(shù),并通過模式匹配提供遞歸解構機制。 以下是由抽象超類Term和三個具體case類Var,F(xiàn)un,和App組成的類層次的例子。

 
 
 
  1. abstract class Term  
  2. case class Var(name: String) extends Term  
  3. case class Fun(arg: String, body: Term) extends Term  
  4. case class App(f: Term, v: Term) extends Term 

這個類層次可以用來表現(xiàn)無類型lambda算子。為了便于case類實例的構建,Scala不需要使用new原語。只要簡單地把類名用作函數(shù)即可。舉例如下:

 
 
 
  1. Fun("x", Fun("y", App(Var("x"), Var("y"))))  

case類的構造器參數(shù)被當作公開值并可以直接被訪問。

 
 
 
  1. val x = Var("x")  
  2. Console.println(x.name) 

對于每個case類,Scala編譯器將產(chǎn)生實現(xiàn)了結構相等性檢查的equals方法和一個toString方法。舉例如下:

 
 
 
  1. val x1 = Var("x")  
  2. val x2 = Var("x")  
  3. val y1 = Var("y")  
  4. println("" + x1 + " == " + x2 + " => " + (x1 == x2))  
  5. println("" + x1 + " == " + y1 + " => " + (x1 == y1)) 

將打印

 
 
 
  1. Var(x) == Var(x) => true 
  2. Var(x) == Var(y) => false 

只有在分解數(shù)據(jù)結構的時候用到了模式匹配的情況下,定義case類才是有意義的。以下的對象為我們的lambda算子的展示定義了漂亮的打印函數(shù):

 
 
 
  1. object TermTest extends Application {  
  2.   def printTerm(term: Term) {  
  3.     term match {  
  4.       case Var(n) =>  
  5.         print(n)  
  6.       case Fun(x, b) =>  
  7.         print("^" + x + ".")  
  8.         printTerm(b)  
  9.       case App(f, v) =>  
  10.         Console.print("(")  
  11.         printTerm(f)  
  12.         print(" ")  
  13.         printTerm(v)  
  14.         print(")")  
  15.     }  
  16.   }  
  17.   def isIdentityFun(term: Term): Boolean = term match {  
  18.     case Fun(x, Var(y)) if x == y => true 
  19.     case _ => false 
  20.   }  
  21.   val id = Fun("x", Var("x"))  
  22.   val t = Fun("x", Fun("y", App(Var("x"), Var("y"))))  
  23.   printTerm(t)  
  24.   println  
  25.   println(isIdentityFun(id))  
  26.   println(isIdentityFun(t))  

我們的例子里,函數(shù)print表達為開始于match關鍵字的,由一系列的case Pattern => Body子句組成的模式匹配語句。

上面的程序還定義了函數(shù)isIdentityFun,用來檢查是否給定的term對應于一個簡單的身份函數(shù)。這個例子使用了深度模式和護衛(wèi)語句。在使用給定值匹配了模式之后,護衛(wèi)語句(定義于關鍵字if之后)被執(zhí)行評估。如果返回true,匹配成功;反之,則匹配失敗,并嘗試下一個模式。

原文來源:Scala官方網(wǎng)站

【相關閱讀】

  1. Groovy創(chuàng)始人:Java面臨終結 Scala將取而代之
  2. Scala的類型系統(tǒng):取代復雜的通配符
  3. Scala的類型系統(tǒng) 比Java更靈活
  4. Java程序員,你為什么要關注Scala
  5. Scala編程語言

網(wǎng)站標題:學習Scala中的Case類
URL網(wǎng)址:http://www.5511xx.com/article/dhhsdpg.html