如果从网上找到一些基础教程,有java基础肯定学的很快。但是我看了几个教程里好像都没有scala的进阶教程。下面说一下scala中的高阶函数。
几个重要的高阶函数有:值函数(作为值的函数),匿名函数,闭包,柯里化等
首先值函数和匿名函数比较好理解,值函数就是把一个函数赋值给一个变量,然后这个变量代表这个函数在程序中传递。
匿名函数就是,我们不用把函数赋值给变量,直接使用。
for example:
1 值函数:
2 匿名函数
左面表示输入参数名称、类型和个数,右边表示函数的实现和返回值类型和参数个数
现在这两个概念应该一目了然了。这里面说一下val func1 = (x:Int) => x*2 ,func1是一个变量,“=”是赋值符号,把等号右边的赋值给左边的变量, "=>"左面表示输入参数名称,参数类型和个数 ,右面是函数的实现和返回值类型和参数个数
3 把方法转换成函数
先定义一个方法,把方法转换成一个函数赋值给变量,方法后添加下划线“_”即可把方法转换成函数
4 柯里化
柯里化从没名字来看无从下手,柯里化是这样的一个概念:把接收多个参数的函数改成接收一个参数的函数
举例来看:
第一步:把一个函数赋值给一个方法
def m(x:Int) = (y:Int) =>x*y
第二步:把传入值的方法赋值给一个定义的函数
val func = m(2) //此时相当于 val func = (y:Int) => 2*y
第三步: 传入函数的参数
func(3)
可以看到第一个红框的地方显示m(2)是一个函数,可能会有疑惑,我定义的m不是一个方法吗,又没有使用下划线转换成
函数怎么就变成了一个函数呢?你可以把m(2)等价的理解成他的返回值,m(2)的返回值不就是一个函数吗,
这样就能理解通了