Scala函数式编程_function & method

夙愿已清 提交于 2019-12-09 20:03:43

Scala函数式编程_function & method

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。

如下赋值给变量的匿名函数,

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 

这样封装的意义就是 其可传递性。如果函数定义的参数超过22 个,就不会被封装成函数对象,如下,

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。

匿名函数的参数个数大于 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============

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!