Scala基礎語法五

2021-08-28 17:10:36 字數 2261 閱讀 2078

1.柯里化

柯里化(currying)指的是將原來接受兩個引數的函式變成新的接受乙個引數的函式的過程,新的函式返回乙個以原有第二個引數為引數的函式

示例:定義乙個方法

def add(x: int, y: int) = x + y
呼叫這個方法應該是add(1,2)

現在將這個方法變形

def add(x:int)(y:int) = x + y
這時候呼叫就是add(1)(2) 

最後結果都一樣是 3,這種方式(過程)就叫柯里化,經過柯里化之後,函式的通用性有所降低,但是適用性有所提高

演變過程:

def add(x: int) = (y: int) => x +
(y: int) => x + y 為乙個匿名函式,,也就意味著 add 方法的返回值為乙個匿名函式 

2.偏函式

被包在花括號內沒有 match 的一組 case 語句是乙個偏函式,它是 partialfunction[a, b]的乙個例項,a 代表引數型別,b 代表返回型別,常用作輸入模式匹配

示例:

def fun(a: string): int = 

def fun1: partialfunction[string, int] =

def main(args: array[string]): unit =

上邊兩個方法最終輸出結果都是一樣的,但是fun1方法是偏函式

3.陣列的定義

陣列的定義,定義乙個固定長度的陣列, 長度可變,,內容可變:

var x:array[string] = new array[string](3)
或者

var y = new array[string](3)
定義定長陣列, 長度不可變, 內容可變:

val z = array(1,2,3)
修改第 0 個元素的內容

z(0) = 100
4.map|flatten|flatmap|foreach 方法的使用

map:map 方法是將 array 陣列中的每個元素進行某種對映操作, (x: int) => x * 2 為乙個匿名函式,x 就是 array 中的每個元素

定義乙個陣列:

val arr = array[int](2, 4, 6, 9, 3)
val y = arr map((x: int) => x * 2)

val z = arr.map(x => x * 2) 編譯器會自動推測 x 的資料型別

val x = array.map(_ * 2) _ 表示入參, 表示陣列中的每個元素值

上邊三種寫法都可以

----------------------------------------分割線------------------------------------------

先定義乙個陣列

val words = array("hello tom hello jim hello jerry", "hello hatano")
將陣列中的每個元素進行分割

val splitwords: array[array[string]] = words.map(wd => wd.split(" "))
此時陣列中的每個元素進過 split 之後變成了 arra, flatten 是對 splitwords裡面的元素進行扁平化操作

val flattenwords = splitwords.flatten
上述的 2 步操作, 可以等價於 flatmap, 意味先 map 操作後進行 flatten 操作

val result: array[string] = words.flatmap(wd => wd.split(" "))
列印每個元素

flattenwords.foreach(println)

result.foreach(println) 這兩個列印的效果一樣

scala基礎語法

一 變數定義 1 val 定義的變數值不可以修改 2 var 定義的變數值可以修改 二 一些變數型別 1 unit 表示不返回任何結果方法的結果型別,相當於void 2 null null 空引用 3 nothing 任何其他類的子型別 4 any 所有其他類的父類 5 anyref 所有引用類的基...

Scala基礎 2 基礎語法

val x 6 if x 0 elsevar i 9 while i 0 val x 0 do while i 5 for 變數 表示式 語句塊 for i 1 to 5 其中 變數 表示式 被稱為 生成器 generator for i 1 to 5 if i 2 0 for i 1 to 5 j...

Scala基礎語法三

1.方法的定義與呼叫 1 方法的定義與呼叫 def 方法名 引數 引數型別,方法返回值型別 當然上邊的方法定義的方式中有許多是可以省略的,例如 省略方法的返回值型別 注意 方法的返回值型別可以不寫,編譯器可以自動推斷出來,但是對於遞迴函式,必須指定返回 省略傳入方法中的引數 注意 如上圖中的例子所示...