函式可以作為引數進行傳遞
def plus(a: int) = a + 10
//array(11, 12, 13)
array(1, 2, 3).map(plus(_))
val array = array(1, 2, 3)
//array(11, 12, 13)
array.map((x: int) => x + 10)
//array(11, 12, 13)
array.map
能接受函式作為引數的函式叫做高階函式;個人理解:類似於**函式
import scala.math._
def valueatonequarter(f: (double) => double) = f(0.25)
valueatonequarter(ceil _)
valueatonequarter(sqrt _)
// 產出函式
def mulby(factor : double) = (x : double) => factor * x
val quintuple = mulby(5)
quintuple(20)
def valueatonequarter(f: (double) => double) = f(0.25)
// 傳入函式表示式
valueatonequarter((x: double) => 3 * x)
// 引數推斷省去型別資訊
valueatonequarter((x) => 3 * x)
// 單個引數可以省去括號
valueatonequarter(x => 3 * x)
// 如果變數旨在=>右邊只出現一次,可以用_來代替
valueatonequarter(3 * _)
val fun2 = 3 * (_: double) // ok
val fun3: (double) => double = 3 * _ // ok
閉包就是乙個而函式吧外部的那些補資料自己的物件也包含進來了閉包機制使用起來就像是乙個函式樣板
def mulby(factor : double) = (x : double) => factor * x
val triple = mulby(3)
val half = mulby(0.5)
println(triple(14) + " " + half(14))
mulby相當於是兩個函式巢狀。
triple、half這兩個函式就叫閉包,閉包有**和**用到的任何非區域性變數定義構成有權訪問另乙個函式作用域內變數
函式程式設計中,接受多個引數的函式都可以轉為接受單個引數的函式,這個轉化過程就叫柯里化,柯里化就是證明了函式只需要乙個引數而已。
// 傳統定義兩個引數
def mul(x:int, y: int) = x * y
mul(6,7)
// 柯里化定義,使用到了閉包
def muloneatatime(x: int) = (y: int) => x * y
muloneatatime(6)(7)
// scala中可以簡寫
def muloneatatime(x: int)(y: int) = x * y
val a = array("hello", "world")
val b = array("hello", "world")
// def corresponds[b](that: genseq[b])(p: (a,b) => boolean): boolean
a.corresponds(b)(_.equalsignorecase(_))
控制抽象是一類函式
特點:
def runinthread(block: () => unit)
}.start()
}// 傳入函式
runinthread
// 這種叫控制抽象 函式
def runinthread(block: => unit)
}.start()
}// 優雅的傳入
runinthread
// 定義類while的until方法,
def until(condition: => boolean)(block: => unit)
}var x = 10
until(x == 0)
thread.sleep(10000)
Scala高階函式
在scala中,無法直接操縱方法,只能直接操縱函式,所以需要使用 import scala math.val temp ceil val num 3.14 println fun temp num temp的型別是 double double,意為接受double引數並返回double的函式。能夠對...
Scala 高階函式
import scala.math.val num 3.14val func ceil 意味著確實指的是這個函式,而不是忘記了傳引數 func是乙個函式變數,內容儲存的是個函式 val v func num println v val arr array 1.0,3.14,4 map func 將函...
Scala高階函式
高階函式 higher order function 高階函式可以使用其他函式作為引數,進入方法內使用,或者使用函式輸出結果作為引數。object demo 函式1,返回當前時間納秒數,long型別 def time t long 可以簡寫為t long,long表示如果傳入引數為方法時返回值為lo...