目的
通过编写函数,借助于闭包
、递归
、控制抽象
、柯里化
等实现while
循环的全部功能,以加深对于高阶函数
的理解。
实现
- 最简单的方法:柯里化
- 复杂:闭包+递归+控制抽象
- 复杂:闭包+递归+控制抽象+匿名函数
具体程序如下:
object mS {
//TODO: 用 闭包+递归+控制抽象 实现while循环的功能
//while循环可以看做两部分代码 1.循环条件 2.循环体
//这两部分都是代码块
def main(args: Array[String]): Unit = {
var i = 10
// myWhile(i > 0)({
// println("i = " + i)
// i -= 1
// })
//小括号可以省略
myWhile(i > 0) {
println("i = " + i)
i -= 1
}
}
/**
* 自定义while循环 柯里化
*
* @param condition 循环判断条件
* @param function 循环体
*/
@tailrec
def myWhile(condition: => Boolean)(function: => Unit): Unit = {
if (condition) {
function
myWhile(condition)(function)
}
}
/**
* 自定义while循环 闭包+递归+控制抽象
*
* @param condition 循环判断条件
* @return Unit
*/
def myWhile2(condition: => Boolean): (=> Unit) => Unit = {
def loop(function: => Unit): Unit = {
if (condition) {
function
myWhile2(condition)(function)
}
}
loop _
}
/**
* 自定义while循环 闭包+递归+控制抽象 匿名函数
*
* @param condition 循环判断条件
* @return Unit
*/
def myWhile3(condition: => Boolean): (=> Unit) => Unit = {
function => {
if (condition) {
function
myWhile3(condition)(function)
}
}
}
}