農林漁牧網

您現在的位置是:首頁 > 農業

scala中各種符號的意思

2022-02-20由 不知名程式設計師韭菜 發表于 農業

地圖比例尺大小怎麼看

scala中各種符號的意思

前言

當我們學習spark的時候,我們知道spark是使用Scala語言開發的,由於語言是相通的,所以對於傳統程式設計師【Java,。net,c等】,我們能看懂Scala程式是沒有問題的。但是當我們看到它的時候,卻傻眼了。那麼多符號,左箭頭,右箭頭,下劃線等等搞得摸不著頭腦。看來如果想順利的學習,我們必須學一下Scala了。很多都是從變數定義,函式,類等入門。由於我們可能有些其他語言基礎,這裡我們從Scala符號入門。一文能幫助大家閱讀比較常見的Scala程式。

Scala符號

如果你學過其它語言,特別是。net語言,那麼你能看懂Java語言。無論是C,C++,還是其它語言,它們的變數,函式的定義都是差不多的。你能知道這是一個函式,並且大概懂得它實現了什麼。但是如果你閱讀過Scala程式碼,你會感覺摸不著頭腦。裡面有各種奇葩符號,比如:<-,->,=>,Int=,_ ,甚至還有空格。同樣還有沒有見過的關鍵字,with,apply。我們來看看這些符號都用在什麼地方:

第一個:<-

這個符號<-用在什麼地方?,比如用於for迴圈

示例1:

scala中各種符號的意思

上面是什麼含義?

迴圈args,打印出裡面的元素

示例2:

scala中各種符號的意思

上面的含義是遍歷一個數組

scala中各種符號的意思

這個符號其實很礙眼,導致你可能根本弄不清楚為什麼要搞這麼個符號。而且很可能被我們誤認為是一個負號。這樣就增大了我們的閱讀難度。但是如何你習慣了,其實Scala還是不錯的,間接而且思想跟別的語言有很大的區別。這裡出現的英文to,也是比較奇怪的,我們看到過變數和函式使用英文,但是在for語句中使用英文,這也太隨意了,不知道的以為是在做閱讀理解。其實這裡的to,是0的一個方法,全寫

scala中各種符號的意思

第二個符號 ->

這個符號用於什麼地方,比如map對映

Map(對映)是一種可迭代的鍵值對(key/value)結構。

// Map 鍵值對演示val colors = Map(“red” -> “#FF0000”, “azure” -> “#F0FFFF”)~~~~~~~~~~~~~~~~~~~~~~~~上面是定義map,那麼map該如何操作:

Scala Map 有三個基本操作:

scala中各種符號的意思

例項以下例項演示了以上三個方法的基本應用:

scala中各種符號的意思

執行以上程式碼,輸出結果為:

scala中各種符號的意思

map對映與map函式的區別

同時有一個小小的不同:如果剛接觸map函式會讓我們特別的困惑和難懂。~~~~~~~~~~~~~~~map函式:函數語言程式設計都有一個map函式,map函式就像一個加工廠,傳入一個函式,利用這個函式將集合裡的每一個元素處理並將結果返回。aList。map(processFunc)//就這麼簡單,aList中的每一個元素將會變成processFunc的返回值。 這個processFunc一般都是匿名函式,因為用過一次後就用不到了。

scala中各種符號的意思

第三個符號=>

這些符號說大於不是大於,說等號不是等號。這個其實是Scala的匿名函式。

左邊是引數,右邊是函式體。在我們印象中,函式體一般都是在大括號中,而這裡真讓我們難以理解。總之:方法引數=> 方法體這時候我們需要明白這是匿名函式這就是Scala不走尋常路,而且其它的很多地方,都是這個樣子。比如下面的函式定義等等。這裡先給大家認識下Scala的匿名函式

scala中各種符號的意思

這裡借用上面的內容,map裡面的x => x*x就是一個匿名函式。

如果初學,我們可能不知道為什麼要產生匿名函式,因為匿名函式基本上使用 一次,後面就用不到了。對於右箭頭,還有一個地方用到就是匹配模式語句case與後面表示式的分隔符例如a match {case 1 => “match 1”case _ => “match _”}從這裡讓我們對符號是否有了新的理解,其實無論它是什麼符號,它只起到分割的作用

第四個“_”

在scala 中,符號“_”相當於java 中的萬用字元“*”。這個有很多的含義1、作為“萬用字元”,類似Java中的*。如import scala。math。_2、:_*作為一個整體,告訴編譯器你希望將某個引數當作引數序列處理!例如val s = sum(1 to 5:_*)就是將1 to 5當作引數序列處理。3、指代一個集合中的每個元素。例如我們要在一個Array a中篩出偶數,並乘以2,可以用以下辦法:a。filter(_%2==0)。map(2*_)。又如要對緩衝陣列ArrayBuffer b排序,可以這樣:val bSorted = b。sorted(_4、在元組中,可以用方法_1, _2, _3訪問組員。如a。_2。其中句點可以用空格替代。5、使用模式匹配可以用來獲取元組的組員,例如val (first, second, third) = t但如果不是所有的部件都需要,那麼可以在不需要的部件位置上使用_。比如上一例中val (first, second, _) = t6、還有一點,下劃線_代表的是某一型別的預設值。對於Int來說,它是0。對於Double來說,它是0。0對於引用型別,它是null。