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
}
}
}