开发者学堂课程【Scala 核心编程 - 进阶:控制抽象介绍和快速入门】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/610/detail/9095
控制抽象介绍和快速入门
内容介绍:
一、看一个需求
二、控制抽象基本介绍
三、总结
一、看一个需求
如何实现将一段代码(从形式上看),作为参数传递给高阶函数,在高阶函数内部执行这段代码.其使用的形式如 breakable{}。
有一段代码直接传给函数,如 breakable
var n= 10
breakable {
while (n <= 20){n += 1
if (n == 18){
break()
}
}
}
Breakable 直接传入代码,代码在 breakable 当作一个函数执行, breakable 接受的类型为没有输入也没有输出的函数,如何函数是没有输入也没有输出的,可以直接传入代码块
二、控制抽象基本介绍
控制抽象是这样的函数,满足如下条件
1.参数是函数
出现构置到函数中可以接受一个函数
2.函数参数没有输入值也没有返回值
案例:
object Abstractcontrol {
def main(args : Array[string]): unit = {
//myRunInThread 就是一个抽象控制
//是没有输入,也没有输出的函数 f1:() => Unit
def myRunInThread(f1:() => Unit) = {
new Thread {
(匿名的一个类)
override def run(): Unit ={
f1()//只写了f1
}
(重写一个run方法)
}.start()
(start()
相当于将
()=>
println("干活咯!5秒完成...")
Thread.sleep(5000)
println("干完咯!")
放入执行,显得较为复杂)
}
myRunInThread {
()=>
println("干活咯!5秒完成...")
Thread.sleep(5000)
println("干完咯!")
(f1()的代码相当于把
println("干活咯!5秒完成...")
Thread.sleep(5000)
println("干完咯!")
复制()里面)
}
def myRunInThread2(f1:=> unit) = {
new Thread {
override def run(): unit = {
f1//只写了f1
}
}.start()
}
可以简化写:
//对于没有输入,也没有返回值的函数,可以简写成如下形式:
myRunInThread2 {
println("干活咯!5秒完成...")
Thread.sleep(5000)
println("干完咯!")
(存在错误,因为f1:()错误)
新建一个
def myRunInThread2(f1:=> unit) = {new Thread {
override def run() : unit = {f1//只写了f1
}
}.start()}
对于直接输入没有返回,相当于传了一个代码块,本质是一个匿名函数
println(”干活咯!5秒完成...~~~")
Thread.sleep( 5000)
printLn(”干完咯!~~~")
}
}
}
输出为干活咯!5秒完成...~~~
三、总结
1.抽象控制的基本使用,提出一个要求,能否写出一个类似的传递代码快的效果,如 breakable
2.举例实现效果,抽象控制的案例,参数是函数,函数没有输入值也没有返回值以及介绍控制抽象的应用案例,原形式与简化形式