Scala高阶函数用法示例和解释详解

本文概述

  • 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中, 函数可以由其他函数组成。这是一个组合过程, 其中一个函数代表两个组合函数的应用。
【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 found10

你可以采用以下方法来避免上述问题。
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

    推荐阅读