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
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4