本文概述
- Scala示例:在函数中将函数作为参数传递
- Scala示例:函数组成
- Scala匿名(lambda)函数
- Scala匿名函数示例
- Scala多行表达
- Scala多行表达式示例
- Scala示例多行表达式
- Scala函数库
- Scala函数库示例
- Scala嵌套函数
- Scala嵌套函数示例
- 具有可变长度参数的Scala函数
- Scala示例:具有可变长度参数的函数
高阶函数是将函数作为参数或返回函数的函数。换句话说, 可以说与该函数一起使用的函数称为高阶函数。
高阶函数允许你创建函数组成, lambda函数或匿名函数等。
让我们来看一个例子。
Scala示例:在函数中将函数作为参数传递
object MainObject {
def main(args: Array[String]) = {
functionExample(25, multiplyBy2) // Passing a function as parameter
}
def functionExample(a:Int, f:Int=>AnyVal):Unit = {
println(f(a)) // Calling that function
}
def multiplyBy2(a:Int):Int = {
a*2
}
}
输出
60
Scala示例:函数组成
在scala中, 函数可以由其他函数组成。这是一个组合过程, 其中一个函数代表两个组合函数的应用。
让我们来看一个例子。
object MainObject {
def main(args: Array[String]) = {
var result = multiplyBy2(add2(10)) // Function composition
println(result)
}
def add2(a:Int):Int = {
a+2
}
def multiplyBy2(a:Int):Int = {
a*2
}
}
输出
24
Scala匿名(lambda)函数
匿名函数是没有名称但可以作为函数使用的函数。当你不想在以后重用匿名函数时, 最好创建一个匿名函数。
你可以通过在Scala中使用=>(火箭)或_(下划线)通配符来创建匿名函数。
让我们来看一个例子。
Scala匿名函数示例
object MainObject {
def main(args: Array[String]) = {
var result1 = (a:Int, b:Int) => a+b // Anonymous function by using => (rocket)
var result2 = (_:Int)+(_:Int) // Anonymous function by using _ (underscore) wild card
println(result1(10, 10))
println(result2(10, 10))
}
}
输出
20
20
Scala多行表达
用多行编写的表达式称为多行表达式。在scala中, 使用多行表达式时要小心。
下面的程序说明了如果我们将表达式分成多行, 则scala编译器将发出警告消息。
Scala多行表达式示例
def add1(a:Int, b:Int) = {
a
+b
}
上面的程序不评估完整的表达式, 只是在这里返回b。因此, 使用多行表达式时要小心。
输出
MainObject.scala:3: warning: a pure expression does nothing in statement
position; you may be omitting necessary parentheses
a
^
one warning found
10
你可以采用以下方法来避免上述问题。
Scala示例多行表达式
object MainObject {
def add2(a:Int, b:Int) = {
a+
b
}
def add3(a:Int, b:Int) = {
(a
+b)
}
def main(args: Array[String]) = {
var result2 = add2(10, 10)
var result3 = add3(10, 10)
println(result2+"\n"+result3)
}
}
输出
20
20
Scala函数库
在scala中, 方法可能具有多个参数列表。当使用较少数量的参数列表调用方法时, 这将产生一个以缺少的参数列表作为参数的函数。
换句话说, 它是一种将带有多个参数的函数转换为带有单个参数的函数的技术。
Scala函数库示例
object MainObject {
def add(a:Int)(b:Int) = {
a+b
}
def main(args: Array[String]) = {
var result = add(10)(10)
println("10 + 10 = "+result)
var addIt = add(10)_
var result2 = addIt(3)
println("10 + 3 = "+result2)
}
}
输出
20
Scala嵌套函数
Scala是一流的函数语言, 这意味着它使你可以传递函数, 返回函数, 组合函数, 嵌套函数等。下面的示例解释了如何定义和调用嵌套函数。
Scala嵌套函数示例
object MainObject {
def add(a:Int, b:Int, c:Int) = {
def add2(x:Int, y:Int) = {
x+y
}
add2(a, add2(b, c))
}
def main(args: Array[String]) = {
var result = add(10, 10, 10)
println(result)
}
}
输出
30
具有可变长度参数的Scala函数
在scala中, 你可以定义可变长度参数的函数。它允许你在调用函数时传递任意数量的参数。
让我们来看一个例子。
Scala示例:具有可变长度参数的函数
def add(args: Int*) = {
var sum = 0;
for(a <- args) sum+=a
sum
}
var sum = add(1, 2, 3, 4, 5, 6, 7, 8, 9);
println(sum);
输出
45