zoukankan      html  css  js  c++  java
  • scala中的函数

    函数基本用法

    1.方法定义用def,函数的参数 要写类型,不写类型不可以。
    2.函数的返回值类型可以不写,会自动推断
    3.scala会将函数体中最后一行计算的结果当做返回值返回
    4.可以写“return”,写了return要显式的声明方法体的返回类型。
    5.定义方法时,如果不写“=”,那么无论方法体中最后一行计算的结果返回是什么,都会被丢弃,返回Unit
    6.方法体可以一行搞定,那么方法体的“{... ...} ” 可以省略不写

        def max(x:Int,y:Int) = {
          if(x>y){
             x
          }else{
             y
          }
        }
    
    
        println(max(100,2))
    
        def max(x:Int,y:Int) = if(x>y) x else y 
    
        println(max(100,2))
    View Code

    递归函数

    递归函数要显式的声明返回类型

        def fun(x:Int):Int = {
          if(x==1){
            1
          }else{
            x*fun(x-1)
          }
        }
        println(fun(5))
    View Code

    函数的参数有默认值

    def fun(x:Int=100,y:Int=200) = x+y
    
    println(fun(y=80))

    可变长参数的函数

        def fun(s:String*)= {
          s.foreach((elem:String)=>{
            println(elem)
          })
        }
        fun("hello","a","b","c")

    匿名函数

        val fun: (Int, Int) => Int = (x:Int,y:Int)=>{
          x+y
        }
    
        println(fun(10,20))

    偏应用函数

    偏应用函数是一个表达式,将方法中不变的参数写上,变化的参数使用“_”表示,下次直接调用这个偏应用表达式直接传入变化的参数就可以

        def showLog(date:Date,log:String) = {
          println("date is "+date+",log is "+log)
        }
    
        val date = new Date()
        showLog(date,"a")
        showLog(date,"b")
        showLog(date,"c")
    
        val fun = showLog(date,_:String)
    
        fun("aaa")
        fun("bbb")
        fun("ccc")

    嵌套函数

        def fun(x:Int) = {
          def fun1(num:Int):Int = {
                  if(num==1){
                      1
                  }else{
                      num*fun1(num-1)
                  }
          }
          fun1(x)
        }
    
        println(fun(5))

    高阶函数

    1.函数的参数是函数
    2.函数的返回是函数 --函数的返回是函数时,要显式声明函数的返回类型
    3.函数的参数和返回都是函数

    //函数的参数是函数
    
        def fun1(f:(Int,Int)=>Int,s:String):String ={
          val result = f(100,200)
          result +"~"+s
        }
    
        val result = fun1((a:Int,b:Int)=>{a*b},"hello")
        println(result)
    
    //函数的返回是函数
    
        def fun(a:Int,b:Int) :(String,String)=>String = {
          val result = a*b
          def fun1(s:String,s1:String) :String= {
            s+"@"+s1+"#"+result
          }
          fun1
        }
    
        println(fun(10,20)("hello","world"))//hello@world#200
    
    //函数的参数和返回都是函数
        def fun(f:(Int,Int)=>Int) :(String,String)=>String= {
    
          val result = f(8,9)
    
          def fun1(s1:String,s2:String):String ={
            s1+"@"+s2+"$"+result
          }
          fun1
    
        }
    
    
        println(fun((a:Int,b:Int)=>{a-b})("hello","world"))
    View Code

    柯里化函数

    柯里化函数就是高阶函数的简化版

        def fun(a:Int,b:Int)(c:Int,d:Int) ={
          a+b+c+d
        }
    
       println( fun(1,2)(3,4))
  • 相关阅读:
    逻辑实现与物理实现
    逻辑实现与物理实现
    可逆矩阵的逆
    可逆矩阵的逆
    算法 Tricks(三)—— 判断序列是否为等差数列
    算法 Tricks(三)—— 判断序列是否为等差数列
    C++ Tricks(一)—— 判断字符串 string 对象的所有字符都相等
    AndroidMainifest标签使用说明3——<activity-alias>
    支持向量机通俗导论(理解SVM的三层境地)
    iOS中,MRC和ARC混编
  • 原文地址:https://www.cnblogs.com/xumaomao/p/12769034.html
Copyright © 2011-2022 走看看