scala_01


object test10 {
  def main(args: Array[String]): Unit = {
    def fun(i: Int): String => (Char => Boolean) = {
      def f1(s: String): Char => Boolean = {
        def f2(c: Char): Boolean = {
          if (i == 0 && s == "" && c == '0') true else false
        }

        f2
      }

      f1
    }
    println(fun(0)("")('0'))
    //匿名函数简写
    def fun2(i: Int): String => (Char => Boolean) = {
      s => c => if (i == 0 && s == "" && c == '0') true else false
    }
    println(fun2(0)("")('0'))
    
    //柯里化
    def fun3(i:Int)(s:String)(c:Char):Boolean={
      if (i == 0 && s == "" && c == '0') true else false
    }
  }
}
package chapter05

/**
 * @auther :${user}
 * @date :2022/2/9 15:49
 *
 */
object test12_mywhile {
  def main(args: Array[String]): Unit = {
    //常规写法
    /*    var n = 10
        while (n == 0) {
          println(n)
          n -= 1
        }
        n = 10*/

    //闭包
    def myWhile(condition: => Boolean): (=> Unit) => Unit = { //代码段传递 ,返回类型是doloop的类型,即返回doloop函数
      def doLoop(op: => Unit): Unit = { //doloop函数传入一个代码段,返回类型是Unit
        if (condition) { //如果条件成立,进行op操作,并进行尾递归
          op //
          myWhile(condition)(op)
        }
      }

      doLoop _
    }


    //lambda写法
    def myWhile04(condition: => Boolean): (=> Unit) => Unit = {
      op => {
        if (condition) {
          op
          myWhile04(condition)(op)
        }
      }
    }


    //柯里化
    def myWhile2(condition: => Boolean)(op: => Unit): Unit = {
      if (condition) {
        op
        myWhile2(condition)(op)
      }
    }


    //闭包的作用
    var n = 13
    var while01 = myWhile(n > 0)
    while01 {
      println(n)
      n -= 1
    }
  }
}

posted @ 2022-02-08 23:21  ftwftw  阅读(49)  评论(0)    收藏  举报