成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

學習Scala中的Case類

開發 后端
本文介紹Scala中Case類的一些使用心得。

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

Scala支持case類的概念。case類也是正規的類,暴露其構造器參數,并通過模式匹配提供遞歸解構機制。 以下是由抽象超類Term和三個具體case類Var,Fun,和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 

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

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

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

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

對于每個case類,Scala編譯器將產生實現了結構相等性檢查的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 

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

  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))  

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

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

原文來源:Scala官方網站

【相關閱讀】

  1. Groovy創始人:Java面臨終結 Scala將取而代之
  2. Scala的類型系統:取代復雜的通配符
  3. Scala的類型系統 比Java更靈活
  4. Java程序員,你為什么要關注Scala
  5. Scala編程語言
責任編輯:yangsai 來源: Regular
相關推薦

2009-07-21 11:25:03

ScalaRational類

2009-07-22 07:53:00

Scala擴展類

2009-07-20 16:56:51

Scala類的定義

2009-09-28 11:37:03

Journal.scaKestrel

2009-06-19 11:13:47

Scalacase類模式匹配

2009-07-21 16:58:31

Scala變量范圍

2009-07-22 07:43:00

Scala閉包

2009-11-16 17:04:46

Inside Scal

2009-06-16 17:54:38

Scala類語法語義

2009-07-22 07:50:00

Scala二維布局庫抽象類

2009-07-22 09:31:59

Scala類類層級Java類

2009-07-22 07:57:00

ScalaCurry化函數

2009-06-19 13:16:36

Scala計算器解析器組合子

2009-09-09 11:37:08

Scala的模式匹配

2009-07-21 08:54:35

Scala富包裝器

2009-07-22 09:22:20

Scala工廠對象

2009-08-03 11:07:18

Scala Actor

2009-06-08 21:45:46

Javaswitch-case

2009-09-22 10:15:42

PersistentQScala

2009-07-22 07:45:00

Scala代碼重復
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩一区和二区 | 每日在线更新av | av中文字幕在线播放 | 国产真实乱对白精彩久久小说 | 精品99在线 | 久久99深爱久久99精品 | 亚洲一区中文字幕 | 日日夜夜精品免费视频 | 国产国拍亚洲精品av | av在线一区二区 | 国产精品视频一 | 成人黄色电影在线播放 | 视频在线h| 日韩国产欧美视频 | 一区二区三区四区在线视频 | 精品成人佐山爱一区二区 | 黄色三级免费网站 | 国产精品久久久久久福利一牛影视 | 久在线视频播放免费视频 | 中文字幕一区二区三区四区五区 | 亚洲国产一区在线 | 91精品久久久久久久久中文字幕 | 99久久精品免费看国产四区 | 精品国产伦一区二区三区观看体验 | 成人一区二区三区 | 中文字幕视频在线免费 | 中文字幕一页二页 | 国产在线一区二区三区 | 羞羞在线视频 | 亚洲免费在线 | 福利网址| 在线2区 | 国产永久免费 | 日韩中文字幕视频在线观看 | 日韩综合在线 | 日韩淫片免费看 | 黄色毛片网站在线观看 | 精品国产一区二区在线 | а天堂中文最新一区二区三区 | 9999国产精品欧美久久久久久 | 中文字幕av亚洲精品一部二部 |