Scala高階函式

2022-08-17 22:36:22 字數 2480 閱讀 7549

函式可以作為引數進行傳遞

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...