scala中「 」的4種使用場景

2022-08-17 17:09:18 字數 1527 閱讀 3210

scala> def double(x: int): int = x*2

double

: (x: int)int //

定義乙個函式變數:

scala> var x : (int) => int = double

x: int => int = //

呼叫 scala> x(2

) res1: int = 4

函式double的型別就是 (x: int) => int 或者 int => int。左邊是引數型別,右邊是方法返回值型別。

備註:當函式只有乙個引數的時候,函式型別裡面括起來函式引數的括號是可以省略的。

//

通過匿名函式定義乙個函式變數xx

scala> var xx = (x: int) => x + 1

xx: int => int = //

給乙個高階函式,傳遞乙個函式:

scala> val newlist = list(1,2,3).map

newlist: list[int] = list(2, 4, 6)

匿名函式定義, 左邊是引數 右邊是函式實現體 (x: int)=>{}

scala> val x = 10; val y = 20

x: int = 10

y: int = 20

scala> val max = x >y match

max: int = 20

在模式匹配 match 和 try-catch 都用 「=>」 表示輸出的結果或返回的值

傳名引數在函式呼叫前表示式不會被求值,而是會被包裹成乙個匿名函式作為函式引數傳遞下去,例如引數型別為無參函式的引數就是傳名引數。

scala> def doubles(x: => int = 0) =

doubles: (x: =>int)int //

呼叫函式

scala> doubles(3

) now doubling

3res2: int = 6

scala> def f(x: int): int =

f: (x: int) int //

呼叫函式

scala> doubles(f(3

)) calling f(3)

now doubling

3calling f(3)

res9: int = 6

//預設引數

scala>doubles()

now doubling

0res2: int = 0

對於函式doubles而言,它的引數x就是by-name的。如果呼叫doubles的時候,直接給個普通的值或者非函式變數。那麼doubles的執行結果就跟普通的函式沒有區別。但是當把乙個返回值為int型別的函式,例如f(2),傳遞給doubles的時候。那麼f(2)會被先計算出返回值2,返回值2傳入doubles參與運算。運算完成以後,f(2)會被doubles在執行以後,再呼叫一遍。

scala中「 」的4種使用場景

表示函式的返回型別 function type scala def double x int int x 2 double x int int 定義乙個函式變數 scala var x int int double x int int 呼叫 scala x 2 res1 int 4 函式double...

Scala隱式轉換幾種使用場景

scala提供的隱式轉換的特性的作用,簡單說就是 當scala編譯器進行型別匹配時,如果找不到合適的型別,那麼隱式轉換會讓編譯器在作用範圍內自動推導出合適的型別,在 重構設計上,可以避免冗餘的 使得 非常優雅。使用場景一 隱式引數 scala def sayhello age int implici...

Scala 箭頭符號使用場景1 的用法

第一次使用,暈菜了 3 目錄 1 的用法 1.1 匿名函式 1.2 按名呼叫 by name parameters 1.3 表示函式的型別 1.4 模式匹配 case語句 2 3 的用法 var userdir println userdir yourpath mul這時候相當於乙個函式啦,給函式傳...