Scala将函数当作一等公民;一个函数可以像一个变量一个被使用;
函数可以作为输入参数传给另一个函数;
函数可以定义为一个匿名函数字面量,就像字符串字面量;
函数可以被赋给一个变量;
可以在一个函数内定义函数;
函数可以作为另外一个函数的返回值;
在Scala中,使用关键字def定义函数;格式如下:
def 函数名(参数1:数据类型,参数2:数据类型):输出类型 = { 函数体 }
例:
def add(firstInput:Int,secondInput:Int):Int = {
val sum = firstInput + secondInput;
return sum;
}
上例的简洁版本如下(省略了输出类型,scala会自动进行类型推断):
def add(firstInput:Int,secondInput:Int) = firstInput + secondInput
Scala支持不同类型的函数,包括:
方法.一个对象的成员函数称为方法.该方法可以访问所属对象的所有字段;
本地函数.在另一个函数或方法内部定义的函数称为"本地函数";它能访问外部函数的变量和输入参数.本地函数只对它所定义的外部函数可见.
高阶方法(higher-order method).一个将一个函数作为输入参数的方法,称为"higher-order method".类似的,一个high-order function是将另一个函数作为输入的函数.高阶方法和高阶函数帮助减少代码重复.此外,使用它们还可以写出更简洁的代码;
下面是一个简单的高阶函数:
def encode(n:Int,f:(Int)=>Long):Long = {
val x = n * 10;
f(x);
}
这段代码输入两个参数,返回一个Long类型的值.第一个输入参数类型是Int.第二个输入参数类型是一个函数f,此函数f需要一个Int类型输入参数,并返回一个Long类型值.
函数字面量.函数字面量指的是一个未命名或匿名函数.在程序中可以像使用一个字符串变量一样使用它.它还可以作为一个输入参数传递给一个高阶方法或高阶函数.另外,它也可以被赋给一个变量.下面是一个函数字面量的例子:
(x:Int) => {
x + 100;
}
字面量函数的定义是使用一个小括号,里面是输入参数,后跟一个右箭头和一个函数体.
上面代码的一个简写版本是: (x:Int) => x + 100;
之前定义的高阶函数encode可以使用一个函数字面量作为输入参数,如下所示:
val code = encode(10,(x:Int) => x + 100);
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。