Scala函數式編程_function & method

Scala函數式編程_function & methodshell

Function 和 Method 傳遞性上的區別

method——指的是在trait、class、object中以def關鍵字聲明的,它不能被直接傳遞。編程

function——類型爲 ParamsType=>ResultType 的變量,這些變量背後是用 FunctionN 對象來封裝的 ,能夠被傳遞。同時,方法也能夠轉換成函數。函數式編程

作個測試,以下,啓動scala shell,函數

scala> val increase = (x: Int) => x + 1
increase: Int => Int = <function1>

scala> val increase = (x: Int) => x + 1
increase: Int => Int = <function1>

scala> val add = (x: Int,y: Int) => x + y
add: (Int, Int) => Int = <function2>

scala>

能夠看到,變量increase(一個匿名函數並賦值給變量),是用 function1 來封裝的。其類型爲  Int => Int。測試

以下賦值給變量的匿名函數,spa

scala> val add = (x: Int,y: Int,z: Int) => x + y + z
add: (Int, Int, Int) => Int = <function3>

scala> val add123 = (x: Int,y: Int,z: Int) => x + y + z
add123: (Int, Int, Int) => Int = <function3>

scala>

這兩個賦值給變量的匿名函數都是用 function3 函數對象來封裝的,其類型爲 (Int, Int, Int) => Int scala

這樣封裝的意義就是 其可傳遞性。若是函數定義的參數超過22 個,就不會被封裝成函數對象,以下,rest

scala> val add3 = (a:Int,b:Int,c:Int,d:Int,e:Int,f:Int,g:Int,h:Int,i:Int,j:Int,k:Int,l:Int,m:Int,n:Int,o:Int,p:Int,q:Int,r:Int,s:Int,t:Int,u:Int,v:Int,w:Int,x:Int) =>
     | a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x
<console>:7: error: implementation restricts functions to 22 parameters
       val add3 = (a:Int,b:Int,c:Int,d:Int,e:Int,f:Int,g:Int,h:Int,i:Int,j:Int,k:Int,l:Int,m:Int,n:Int,o:Int,p:Int,q:Int,r:Int,s:Int,t:Int,u:Int,v:Int,w:Int,x:Int) =>
                                                                                                                                                                    ^

scala>

implementation restricts functions to 22 parameters。code

匿名函數的參數個數大於 22 個,不能用 FunctionN  來封裝。但方法的參數能夠大於 22 個。對象

以下,用def 定義一個方法,

scala> def add(a:Int,b:Int,c:Int,d:Int,e:Int,f:Int,g:Int,h:Int,i:Int,j:Int,k:Int,l:Int,m:Int,n:Int,o:Int,p:Int,q:Int,r:Int,s:Int,t:Int,u:Int,v:Int,w:Int,x:Int) = {
     |   a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x
     | }
add: (a: Int, b: Int, c: Int, d: Int, e: Int, f: Int, g: Int, h: Int, i: Int, j: Int, k: Int, l: Int, m: Int, n: Int, o: Int, p: Int, q: Int, r: Int, s: Int, t: Int, u: Int, v: Int, w: Int, x: Int)Int

參數的個數已經24 個。

============END============

相關文章
相關標籤/搜索