日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Spark记录-Scala语法基础

發布時間:2024/9/5 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)/sdcurrying,語法明顯。
def zscore(mean:R, sd:R) = (x:R) => (x-mean)/sdcurrying,語法明顯
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语法基础的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。