自定义while 循环所涉及的Scala知识:
1.闭包:
一个函数,访问到了他的外部(局部)变量的值,那么这个函数和他所处的环境称为闭包
2.递归调用:
一个函数/方法在函数/方法体内又调用了本身
3.控制抽象:
名调用:传名参数,传递不再是具体的值,而是代码块
4.匿名函数:
匿名函数又称为lambda表达式: ( 参数: 类型 ) => { 函数体 }
5.函数柯里化:
把一个参数列表的多个参数,变成多个参数列表
一、采用闭包实现函数,将代码块作为参数传入进行递归调用
// condition 是 传入的判断条件
def myWhile(condition: =>Boolean): (=> Unit) => Unit = {
// 内层函数需要递归调用,参数是循环体
def loop(op: => Unit): Unit = {
if(condition){
op
myWhile(condition)(op)
}
}
loop _
}
二、通过匿名函数进行代码简化
def myWhile(condition: =>Boolean): (=> Unit) => Unit =
{
op => {
if(condition){
op
myWhile(condition)(op)
}
}
}
三、使用柯里化实现
def myWhile(condition: =>Boolean)(op: => Unit): Unit =
{
if(condition) {
op
myWhile(condition)(op)
}
}
四、可依次对上述函数进行检验:实现1到10的累加输出
var n = 1
myWhile(n <= 10){
println(n)
n += 1
}