Scala部分函式 偏函式

2021-10-25 06:24:17 字數 2487 閱讀 7324

例如:def sum(x: int, y: int, z: int) = x + y + z,

當呼叫sum的時候,如果不提供所有的引數,或者只提供某些引數時,比如sum _ , sum(3, _: int, :int), sum(: int, 3, 4), 這樣就生成了所謂的部分應用函式。

案例:

def showmsg(title:

string

, content:

string

, num:

int)

= showmsg(

"警告"

,"當前水位是",12

)//部分函式形式

val title =

"警告"

def showwateralter = showmsg(title,_:

string

,_:int

)//部分函式

showwateralter(

"當前水位",14

在scala中,偏函式是具有型別partialfunction[-t,+v]的一種函式。t是其接受的函式型別,v是其返回的結果型別。

偏函式最大的特點就是它只接受和處理其引數定義域的乙個子集,而對於這個子集之外的引數則丟擲執行時異常。這與case語句的特性非常契合,因為我們在使用case語句是,常常是匹配一組具體的模式,最後用「_」來代表剩餘的模式。如果一一組case語句沒有涵蓋所有的情況,那麼這組case語句就可以被看做是乙個偏函式。

案例一:

//偏函式

def funpartional:partialfunction[

string

,int]=

val num = funpartional(

"scala"

)println(num)

// 0

//批量輸入,判斷輸出

val worlds = list(

"hello"

,"world"

,"gree"

,"kb09"

)//方式一

val ints:list[

int]

= worlds.collect(funpartional)

println(ints)

// list(1, 2, 0, 0)

ints.foreach(println)

// 1 2 0 0

//方式二

worlds.collect(funpartional)

.foreach(println)

// 1 2 0 0

//方式三

案例二:

//輸入字元,輸出元組

def funtupple:partialfunction[

char,(

char

,int)]

=val tuple:

(char

,int

)= funtupple(

'a')

println(tuple)

// (a,1)

var chars = list(

'a',

'b',

'c',

'd')

val tuples:list[

(char

,int)]

= chars.collect(funtupple)

//方式一

tuples.foreach(println)

// (a,1),(b,1),(x,1),(x,1)

//方式二

案例三:

//輸入不同型別資料,輸出int型別

參考部落格:

scala 部分應用函式與偏函式

部分應用函式 是指乙個函式有n個引數,而我們為其提供少於n個引數,那就得到了乙個部分應用函式.def sum a int,b int,c int a b c 那麼就可以從這個函式衍生出乙個偏函式是這樣的 def p sum sum 1,int,int 於是就可以這樣呼叫p sum 2,3 相當於呼叫...

scala之偏函式

object partion 用case定義偏函式 val div3 partialfunction int,int val res partialfunction int,string 組合多個偏函式 val r1 partialfunction int,string val r2 partial...

scala之偏函式

只對於偏愛的值進行處理,其他值不進行處理 val list1 list 1,2,3,a true 實現 partialfunction 輸入型別,輸出型別 val f new partialfunction any,int 偏函式使用 val result list1.collect f print...