zoukankan      html  css  js  c++  java
  • Scala高阶函数

    1、作为参数的函数

    函数可以作为一个参数传入到一个方法当中去

    def main(args: Array[String]): Unit = {

    val myFunc1 =(x:Int) =>{

    x * x

    }

    val myArray = Array(1,3,5,7,9).map(myFunc1)

    println(myArray.mkString(","))

    }

    2、匿名函数

    没有名字的函数即是匿名函数,我们可以通过函数表达式来设置匿名函数

    def main(args: Array[String]): Unit = {

    val hiddenFunc = (x:Int,y:String) => x + y

    println(hiddenFunc)

    }

    3、高阶函数

    1、能够接受函数作为参数的方法,叫做高阶函数

    def main(args: Array[String]): Unit = {

    val func3:(Int,String) =>(String,Int)={

    (x,y)=>(y,x)

    }

    def myMethod3(hello:(Int,String) => (String,Int)):Int ={

    val resultFunc = hello(20,"hello")

    resultFunc._2

    }

    println(myMethod3(func3))

    }

    2、高阶函数同样可以返回一个函数类型

    def main(args: Array[String]): Unit = {

    def myFunc4(x:Int) = (y:String) => y

    println(myFunc4(50))

    }

    4、参数类型推断

    def main(args: Array[String]): Unit = {

    val array = Array(1,2,3,4,5,6,7,8,9)

    //map当中需要传入一个函数,我们可以直接定义一个函数

    array.map((x:Int) => x * 2 )

    //进一步化简参数推断省去类型信息

    array.map((x) => x * 2 )

    //进一步化简单个参数可以省去括号

    array.map( x => x * 2 )

    //进一步化简如果变量只在=>右边只出现一次,可以用_来代替

    array.map( 2 * _ )

       

    }

    5、闭包与柯里化

    柯里化是scala当中面向函数式编程导致的一种必然的结果,最终推导而来产生的一种现象

    def main(args: Array[String]): Unit = {

    //柯里化的定义形式

    def kery(x:Int)(y:Int):Int={

    x + y

    }

    println(kery(3)(5))

    //柯里化的推导过程,注意方法的返回值不要定义任何的返回值类型

    val keryResult = (x:Int) => (y:Int) => {x + y}

    def keryMethod(x:Int) ={

    (y:Int) => x+ y

    }

    println(keryMethod(20))

    println(keryMethod(20)(10))

    //注意,方法当中的函数,调用了方法的参数,就叫做闭包

    }

       

    再来看一个案例

    /**

    * 柯里化的应用,比较数组集合当中两个对应下标字符串是否相等

    * @param args

    */

    def main(args: Array[String]): Unit = {

    val a = Array("Hello", "World")

    val b = Array("hello", "world")

    println(a.corresponds(b)(_.equalsIgnoreCase(_)))

       

    }

  • 相关阅读:
    Linux常用命令(二)
    C#异步调用
    Ajax运用总结
    SQL Server2005 FOR XML PATH 语句的应用
    SQL Server 2005 处理交叉表
    如何控制并发和控制死锁(内含pb的处理要点)
    WPF 中的换行符
    C#委托的异步调用
    pivot 附近有语法错误,您可能需要将当前数据库的兼容级别设置为更高的值。
    应用系统BUG分布小结
  • 原文地址:https://www.cnblogs.com/starzy/p/10466510.html
Copyright © 2011-2022 走看看