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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程