scala> def double(x: int): int = x*2double
: (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 = 20x: 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這時候相當於乙個函式啦,給函式傳...