Lesson_fun

package com.bjsxt.scala

import java.util.Date

object Lesson_fun {
  def main(args: Array[String]): Unit = {
    /**
     * 1.方法定义
     * 	1.方法定义使用“def”
     * 	2.方法可以传参,参数类型不能省略,方法的计算结果类型可以省略,会自动推断。
     * 	3.方法名和方法体“{...}”要有等号隔开,也可以不写“=”,不写“=”无论方法体最后一行计算结果是什么,都会被丢弃,返回Unit.
     * 	4.方法体中的返回值可以使用return返回,如果写“return”,方法体的返回类型不能省略。
     * 		也可以不使用return返回,不写return 方法体默认将最后一行计算的结果返回,建议不写return。
     * 	5.方法体中如果一行可以搞定,方法体的“{..}”可以省略不写。
     */
//    def max(x:Int,y:Int) ={
//      if(x>y){
//         x
//      }else{
//         y
//      }
//    }
//    def max(x:Int,y:Int) = if(x>y)  x else y
//    
//    println(max(1,2))
    
    /**
     * 2.递归函数
     *  递归方法要显式声明方法的返回类型
     * 
     */
//    def fun(num:Int):Int = {
//      if(num==1){
//        num
//      }else{
//        num*fun(num-1)
//      }
//    }
//    
//    println(fun(5))
    
    /**
     * 3.参数有默认值的函数
     */
//    def fun(a:Int=100,b:Int=200) = {
//      a+b
//    }
//    
//    println(fun(b=3))
    
    /**
     * 4.可变长参数的函数
     */
//    def fun(s:String*) = {
//      s.foreach((str:String)=>{
//        println(str)
//      })
//    }
//    def fun(ss:String*) = {
//    		ss.foreach(println)
//    }
//    
//    fun("abc","hello","world","yyy")
    
    /**
     * 5.匿名函数
     */
//    val f = ()=>{
//      println("hello world~")
//    }
    
//    val f = (a:Int,b:Int)=>{
//      a+b
//    }
//   println(f(100,200))
    
    
    /**
     * 6.偏应用函数
     */
//    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")
    
    /**
     * 7.嵌套函数
     */
//    def fun(i:Int)={
//      
//      def fun1(a:Int):Int={
//        if(a==1){
//          1
//        }else{
//          a*fun1(a-1)
//        }
//      }
//      
//      fun1(i)
//      
//    }
//    
//    println(fun(5))
    
    /**
     * 8.高阶函数
     * 	函数的参数是函数
     *  函数的返回是函数
     *  函数的参数和返回都是函数
     */
    //函数的参数是函数
    
//    def fun1(f:(Int,Int)=>Int,c:String) = {
//      val result = f(100,200)
//      result+"~"+c
//    }
//    val end = fun1((a:Int,b:Int)=>{
//      a*b
//    },"hello")
//    
//    println(end)
    
    //函数的返回是函数 -----要显示的声明函数的返回类型
//     def fun(a:Int,b:Int) :(Int,Int)=>Int= {
//       val result = a+b
//       def fun1(i:Int,j:Int):Int={
//         i*j+result
//       }
//       fun1
//     }
//    
//    println(fun(1,2)(100,200))
    
    // 函数的参数和返回都是函数
    
//    def fun(f:(Int,Int)=>Int,a:Int):(String,String)=>String ={
//      val result = f(1,2)+a
//      def fun1(s1:String,s2:String):String = {
//        s1+"@"+s2+"$"+result
//      }
//     fun1 
//    }
//    
//    println(fun((a:Int,b:Int)=>{a*b},100)("hello","world"))//hello@world$102
    
    /**
     * 9.柯里化函数
     *   高阶函数简化版
     */
//    def fun(a:Int,b:Int)(c:Int,d:Int) = {
//      a+b+c+d
//    }
//    
//    println(fun(1,2)(3,4))
  }
}

  

原文地址:https://www.cnblogs.com/huiandong/p/9278287.html