加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala学习之高阶函数

发布时间:2020-12-16 09:47:45 所属栏目:安全 来源:网络整理
导读:package com.lyzx.scalaLearn class Day01 { /** * 函数也是一个值 * 1 可以赋值给一个变量 * 2 可以定义在一个函数的内部 * 3 可以当做参数传递给另一函数 * @param a * @param b * @param operator * @return */ def mycalc (a: Int, b: Int, operator: In
package com.lyzx.scalaLearn

class Day01 {
  /**  * 函数也是一个值  * 1>可以赋值给一个变量  * 2>可以定义在一个函数的内部  * 3>可以当做参数传递给另一函数  * @param a  * @param b  * @param operator  * @return  */  def mycalc(a:Int,b:Int,operator:Int):Int={
    def add(one:Int,two:Int):Int ={
      one+two
    }

    def min(one:Int,two:Int): Int ={
      one-two
    }

    if(1 == operator)
      add(a,b)
    else  min(a,b)
  }


  /**  * 求第N个斐波那契数  * @param n n>=3  * @return  */  def f2(n:Int): Int ={
    var index = 3
    def fib(one:Int,two:Int,x:Int): Int ={
        if(x == index){
          one+two
        }else {
          index += 1
          fib(two,one+two,x)
        }
    }
    val result = fib(0,1,n)
    println("result:"+result)
    result
  }


  def max(one:Int,two:Int):Int ={
    if(one >= two) one
    else two
  }

  def min(one:Int,two:Int):Int ={
    if(one <= two) one
    else two
  }

  /**  * 可以把函数当做参数一样传递  * 在定义传入的参数类型时需要定义函数的参数列表和返回值类型  * @param one  * @param two  * @param f  * @return  */  def getNum(one:Int,f:(Int,Int)=>Int): Int ={
    f(one,two)
  }

  /**  * 这是一个多态函数也就泛型函数即可以操作多种数据类型  * @param arr  * @param target  * @param f  * @tparam T  * @return  */  def findFirst[T](arr:Array[T],target:T,f:(T,T)=>Boolean):Int ={
      def go[K](index:Int): Int ={
          if(index >= arr.length)
            -1
          else if(f(arr(index),target))
            index
        else  go(index+1)
      }
    go(0)
  }
}


case class X(id:Int,name:String,age:Int)

object Day01{

  def main(args: Array[String]): Unit = {
    val t = new Day01
//    val result = t.mycalc(11,1,-9)
//    println(result)

//    val count = t.f2(10)
//    println(count)

//    val getMin = t.getNum(12,33,t.min)
//    println(getMin)

    val arr = Array(new X(1,"金刚狼",200),new X(2,"万磁王",60),new X(3,"",90))
    val target = new X(3,90);

    //可以把函数赋值给一个变量并传递给其他函数
    val f = (x:X,y:X)=>{x.equals(y)}
    val result = t.findFirst(arr,target,f)
    println("result="+result)

    val arr2 = Array(1,2,3,4,5)
    //使用匿名函数,但是注意,在定义匿名函数的时候也要带上参数列表的类型
    val result2 = t.findFirst(arr2,(x:Int,y:Int)=>{x == y})
    println("result2="+result2)
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读