开发者学堂课程【Scala 核心编程 - 进阶:控制抽象的最佳实践】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/610/detail/9096
控制抽象的最佳实践
一、进阶用法:实现类似 while 的 until 函数
控制抽象结合函数柯里化会实现 while 循环的效果
While 循环中
object contrilAbstractApp {
def main(args : Array [string]): unit = {
var x = 10
while (x > o){
x -= 1
printLn( "x=” + x)
}
}
}
输出为x=9到x=0,一共10次
//使用控制抽象,学出 until 函数,实现类似的效果
演示:
var x = 10
def until(condition: => Boolean)(block: => Unit): Unit = {
(接受两个函数,一个没有传入值,有返回 boolean 的,另一个没有传入值,也没出返回值 )
//类似while循环,递归
if (condition){
Block
//递归调用 until
until(condition)(block)}
//println(""x=” + x)
//println(condition)
//block
//println("x=”+ x)
}
演示:
X=10
until(x>O){
x -=1
printIn("x=" + x)}
}
}
与 while 非常相似,但是使用了控制抽象
运行结果与 while 循环相同 x=9到 x=0
【案例演示+代码说明】
var x =10
while (x > o){
x -= 1
println( "x"=+x)
}
}
}
输入结果为x=9 x=8 x=7 x=6 x=5 x=4 x=3 x=2 x=1 x=0
//我们可以使用控制抽象写出until函数,实现类似的效果
x=10
Until(x>0){
x-=1
println("until x=" + x)
}
}
输入结果为until=9 until=8 until=7 until=6 until=5 until=4 until=3 until=2 until=1 until=0
def until(condition: =>Boolean)(block: => unit): unit = {
//类似whiLe循环,递归
if ( condition) {
block
/
/
递归调用until
until(condition)(block)
}
二、总结
使用控制抽象实现 while 的函数 until
x =10
until(x > o){x -= 1
println( "until x=” + ×)}
def until(condition: => Boolean)(block: => unit): unit = {//类似while循环,递归
if (condition) {
block
//递归调用until
until(condition)(block)}
}
反复调用,condition: 传给 Boolean ,block代码块传入,反复传入, 由于x 为外部变量,最终会变为 false ,推出递归。