Scala的符號入門


Spark是由Scala編寫的。Spark作為一款十分易用高效的大數據框架使用越來越廣泛,Scala也隨之有更多的人去學習。
語言相通,相信有python、java基礎的程序員學習Scala並沒有太大的難度。但是Scala程序中奇奇怪怪的操作符卻讓人十分撓頭。
Scala的教程大多都是從變量定義、函數、類等入門,我們直接從Scala符號入門,直接從代碼中體會Scala的特性。

1. 怪符<-

經常在for循環中的使用,被稱生成器(generator)。

在執行過程中,集合filesHere中(Array[File])的元素將依次賦給file,file類型為File,打印時調用其toString方法將文件名稱打印出來。

val filesHere = (new java.io.File(".")).listFiles
//直接遍歷數組元素
for (file <- filesHere)
     | println(file)

//間接遍歷數組
for (i <- 0 to filesHere.length - 1)
println(filesHere(i))

還可以配合 untilif等加入一些限制條件。

for(i <- res39) println("Iteration"+i)

for(i <- 1 to 5) println("Iteration"+i)

// 這樣寫看着奇怪,是同樓上一樣的
for(i <- 1 .to(5)) println("Iteration"+i)

//如果不需要5出現,則用until
scala> for(i <- 1 until 5) println("Iteration"+i)

//加入if條件
for (file <- filesHere if file.getName.endsWith(".scala"))
println(file)

2. 怪符->

這個符號用於Map(映射)。Map是一種可迭代的鍵值對(key/value)結構。默認情況下 Scala 使用不可變 Map。 如果要使用可變集合,需要顯式的引入 import scala.collection.mutable.Map 類

// 空哈希表,鍵為字符串,值為整型
var A:Map[Char,Int] = Map()

// 需要添加 key/value對,可以使用 + 號
A += ('I' -> 1)
A += ('J' -> 5)
A += ('K' -> 10)
A += ('L' -> 100)

// Map 鍵值對演示
val B = Map("red" -> "#FF0000", "azure" -> "#F0FFFF")

//使用 ++ 運算符或 Map.++() 方法來連接兩個 Map,Map 合並時會移除重復的 key
//  ++ 作為運算符
var ab = A ++ B
//  ++ 作為方法
ab = A.++(B)

3. 怪符=>

類似於轉化符號,=> 指明這個函數把左邊的東西(任何整數x)轉變成右邊的東西(x + 1)。所以,這是一個把任何整數x映射為x + 1的函數。有點像匿名函數,匿名函數由參數列表,箭頭連接符=>和函數體組成。

// 定義匿名函數
val cube = (x: Int) => x * x *x 

(x: Int)是匿名函數的參數,x * x *x 是函數體,箭頭連接符=> 連接參數列表和函數體。

Scala中的=>符號也可以看做是創建函數實例的語法糖。例如:A => TA,B => T表示一個函數的輸入參數類型是“A”,“A,B”,返回值類型是T。

val f: Int => String = myInt => "The value of myInt is: " + myInt.toString()
println(f(3))

上面例子定義函數f:輸入參數是整數類型,返回值是字符串。

另外,() => T表示函數輸入參數為空,而A => Unit則表示函數沒有返回值。

4. 怪符_

這個和python一樣了,是一個程序員懶得命名的變量。有時候也當通配符用的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM