Scala函数式编程_function & method

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

转载于:https://my.oschina.net/xinxingegeya/blog/362279

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值