Spark记录-Scala语法基础
生活随笔
收集整理的這篇文章主要介紹了
Spark记录-Scala语法基础
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
參考:http://docs.scala-lang.org/cheatsheets/index.html、http://docs.scala-lang.org/、http://www.scala-lang.org/api/2.10.4/#package
| 變量 | ? |
| var x = 5 | 變量 |
| 好 val x = 5 不好 x=6 | 不變 |
| var x: Double = 5 | 顯式類型 |
| 功能 | ? |
| 好 def f(x: Int) = { x*x } 不好 def f(x: Int) { x*x } | 定義函數 隱藏錯誤:無=這是一個單元返回過程;?造成嚴重破壞 |
| 好 def f(x: Any) = println(x) 不好 def f(x) = println(x) | 定義函數 語法錯誤:每個arg需要類型。 |
| type R = Double | 類型別名 |
| def f(x: R)?與 def f(x: => R) | 按值 呼叫按名稱(懶惰參數) |
| (x:R) => x*x | 匿名功能 |
| (1 to 5).map(_*2)?與 (1 to 5).reduceLeft( _+_ ) | 匿名函數:下劃線是位置匹配的arg。 |
| (1 to 5).map( x => x*x ) | 匿名函數:要使用一個arg兩次,必須命名它。 |
| 好 (1 to 5).map(2*) 不好 (1 to 5).map(*2) | 匿名函數:綁定中綴方法?使用2*_了理智的緣故吧。 |
| (1 to 5).map { x => val y=x*2; println(y); y } | 匿名函數:塊樣式返回最后一個表達式。 |
| (1 to 5) filter {_%2 == 0} map {_*2} | 匿名函數:管道風格。(或者也是parens)。 |
| def compose(g:R=>R, h:R=>R) = (x:R) => g(h(x))? val f = compose({_*2}, {_-1}) | 匿名功能:傳入多個塊,需要外部的包袱。 |
| val zscore = (mean:R, sd:R) => (x:R) => (x-mean)/sd | currying,語法明顯。 |
| def zscore(mean:R, sd:R) = (x:R) => (x-mean)/sd | currying,語法明顯 |
| def zscore(mean:R, sd:R)(x:R) = (x-mean)/sd | 咖喱,糖語法。但是之后: |
| val normer = zscore(7, 0.4) _ | 需要尾隨下劃線才能得到部分,只有糖版本。 |
| def mapmake[T](g:T=>T)(seq: List[T]) = seq.map(g) | 泛型類型。 |
| 5.+(3); 5 + 3? (1 to 5) map (_*2) | 中綴糖。 |
| def sum(args: Int*) = args.reduceLeft(_+_) | 可變參數。 |
| 包 | ? |
| import scala.collection._ | 通配符導入。 |
| import scala.collection.Vector? import scala.collection.{Vector, Sequence} | 選擇性進口。 |
| import scala.collection.{Vector => Vec28} | 重命名導入。 |
| import java.util.{Date => _, _} | 從Date中除外的java.util全部導入。 |
| package pkg?在文件開始? package pkg { ... } | 申報一個包裹。 |
| 數據結構 | ? |
| (1,2,3) | 元組文字。(Tuple3) |
| var (x,y,z) = (1,2,3) | 解構綁定:通過模式匹配解開元組。 |
| 壞 var x,y,z = (1,2,3) | 隱藏的錯誤:每個分配給整個元組。 |
| var xs = List(1,2,3) | 列表(不可變)。 |
| xs(2) | paren索引。(幻燈片) |
| 1 :: List(2,3) | 利弊。 |
| 1 to 5?與...一樣?1 until 6? 1 to 10 by 2 | 范圍糖。 |
| ()?(空的parens) | Unit類型的唯一成員(如C / Java void)。 |
| 控制結構 | ? |
| if (check) happy else sad | 有條件的。 |
| if (check) happy? 與...一樣 if (check) happy else () | 有條件的糖。 |
| while (x < 5) { println(x); x += 1} | while循環。 |
| do { println(x); x += 1} while (x < 5) | 做while循環。 |
| import scala.util.control.Breaks._ breakable {for (x <- xs) {if (Math.random < 0.1)break} } | 打破。(幻燈片) |
| for (x <- xs if x%2 == 0) yield x*10? 與...一樣 xs.filter(_%2 == 0).map(_*10) | 理解:過濾器/地圖 |
| for ((x,y) <- xs zip ys) yield x*y? 與...一樣 (xs zip ys) map { case (x,y) => x*y } | 理解:解構約束 |
| for (x <- xs; y <- ys) yield x*y? 與...一樣 xs flatMap {x => ys map {y => x*y}} | 理解:交叉產品 |
| for (x <- xs; y <- ys) {println("%d/%d = %.1f".format(x, y, x/y.toFloat)) } | 理解:勢在必行 sprintf式 |
| for (i <- 1 to 5) {println(i) } | 理解:迭代包括上限 |
| for (i <- 1 until 5) {println(i) } | 理解:迭代省略上界 |
| 模式匹配 | ? |
| 好 (xs zip ys) map { case (x,y) => x*y } 不好 (xs zip ys) map( (x,y) => x*y ) | 用于模式匹配的函數參數用例。 |
| 壞 val v42 = 42 Some(3) match {case Some(v42) => println("42")case _ => println("Not 42") } | “v42”被解釋為與任何Int值匹配的名稱,并且打印“42”。 |
| 好 val v42 = 42 Some(3) match {case Some(`v42`) => println("42")case _ => println("Not 42") } | 帶有反引號的“v42”被解釋為現有的val?v42,并且“Not 42”被打印。 |
| 好 val UppercaseVal = 42 Some(3) match {case Some(UppercaseVal) => println("42")case _ => println("Not 42") } | UppercaseVal被視為現有的val,而不是新的模式變量,因為它以大寫字母開頭。因此,UppercaseVal檢查包含在內的值3,并打印“不是42”。 |
| 面向對象 | ? |
| class C(x: R) | 構造函數參數 -?x僅在類體中可用 |
| class C(val x: R) var c = new C(4) c.x | 構造函數參數 - 自動公共成員定義 |
| class C(var x: R) {assert(x > 0, "positive please")var y = xval readonly = 5private var secret = 1def this = this(42) } | 構造函數是類體 聲明一個public成員 聲明一個gettable但不可設置的成員 聲明一個私有成員的 替代構造函數 |
| new{ ... } | 匿名類 |
| abstract class D { ... } | 定義一個抽象類。(非可創建) |
| class C extends D { ... } | 定義一個繼承的類。 |
| class D(var x: R) class C(x: R) extends D(x) | 繼承和構造函數參數。(心愿:默認自動傳遞params) |
| object O extends D { ... } | 定義一個單例。(模塊樣) |
| trait T { ... } class C extends T { ... } class C extends D with T { ... } | 特征。 接口與-實施。沒有構造函數參數。可混合的。 |
| trait T1; trait T2 class C extends T1 with T2 class C extends D with T1 with T2 | 多重特質。 |
| class C extends D { override def f = ...} | 必須聲明方法覆蓋。 |
| new java.io.File("f") | 創建對象。 |
| 壞的 new List[Int] 好 List(1,2,3) | 類型錯誤:抽象類型 代替,慣例:可調用的工廠陰影類型 |
| classOf[String] | 類文字。 |
| x.isInstanceOf[String] | 類型檢查(運行時) |
| x.asInstanceOf[String] | 類型轉換(運行時) |
| x: String | 歸屬(編譯時間) |
1.關鍵字
abstract case catch class def do else extends false final finally for forSome if implicit import lazy macro match new null object override package private protected return sealed super this throw trait try true type val var while with yield_ : = => <- <: <% >: # @
2.符號
空白字符。\u0020 | \u0009 | \u000D | \u000A。
字母包括小寫字母(Ll),大寫字母(Lu),標題字母(Lt),其他字母(Lo),字母數字(Nl)以及兩個字母\u0024 ‘$’和數字\u005F ‘_’。
數字‘0’ | … | ‘9’。
括號‘(’ | ‘)’ | ‘[’ | ‘]’ | ‘{’ | ‘}’。
分隔符字符‘`’ | ‘'’ | ‘"’ | ‘.’ | ‘;’ | ‘,’。
操作員字符。這些包含所有可打印的ASCII字符(\u0020-?\u007E),不在上述集合中,數學符號(Sm)和其他符號(So)。
| ‘\‘ ‘b‘ | \u0008 | 退格 | BS |
| ‘\‘ ‘t‘ | \u0009 | 水平選項卡 | HT |
| ‘\‘ ‘n‘ | \u000a | 換行 | LF |
| ‘\‘ ‘f‘ | \u000c | 形成飼料 | FF |
| ‘\‘ ‘r‘ | \u000d | 回車 | CR |
| ‘\‘ ‘"‘ | \u0022 | 雙引號 | " |
| ‘\‘ ‘'‘ | \u0027 | 單引號 | ' |
| ‘\‘ ‘\‘ | \u005c | 反斜線 | \ |
?
?轉載于:https://www.cnblogs.com/xinfang520/p/7825947.html
總結
以上是生活随笔為你收集整理的Spark记录-Scala语法基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 实现批量从不同的Linux
- 下一篇: Jzoj5429 排列