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
微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?