📜  Scala高阶()函数

📅  最后修改于: 2021-01-09 11:40:28             🧑  作者: Mango

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