Scala的底层通信与隐式转换
底层通信
Master和Worker机制
1.Worker会向Master汇报自己的情况(核数,内存)
2.Master收到Worker的信息后,会告知Worker自己已注册成功
3.Worker注册成功后会定期向Master汇报自己的健康状态(心跳)
4.Master收到Worker的心跳后,会定期更新Worker的状态(如果心跳间隔大于某个间隔,则该Worker已挂,Master不会给Worker分配任务)
隐式转换(implicit)
用来增强一些方法或者类的方式
隐式参数
//say方法的参数是隐式参数,也可以指定一个默认值
def say(implicit context:String="hello"): Unit =print(context)
def main(args: Array[String]): Unit = {
implicit val msg = "hello"
//调用时如果没有指定,编译器会从上下文中找一个符合参数类型的隐式值
say
}
注意:implicit必须位于多个参数的最后,一个括号中有多个隐式参数时只写一次,编译器在查找隐式值时不能有歧义
隐式类型
一、//定义一个隐式方法
implicit def parseDaI(double:Double) = double.toInt
//定义一个隐式函数
implicit val parseDaI2 =(double:Double)=>double.toInt
def main(args: Array[String]): Unit = {
//从当前上下文中找一个能把double类型转换成Int类型的隐式方法
val age:Int = 20.5
}
二、
import java.io.{BufferedReader, File, FileReader}
//定义一个隐式类
class RichFile(file:File) {
def count():Int={
val fileReader = new FileReader(file)
val reader = new BufferedReader(fileReader)
var sum = 0;
try {
var line = reader.readLine();
while (line != null) {
sum += 1;
line = reader.readLine();
}
} catch {
case _:Exception =>sum
}
sum
}
}
class HelloWorld {
//定义一个方法对file进行隐式转换
implicit def FiletoFileRich(file:File) = new RichFile(file)
def main(args: Array[String]): Unit = {
var file = new File("D://test//a.log")
file.count();
}
}
注意:隐式函数优先于隐式方法
隐式类
object HelloWorld{
//只能在静态类中使用隐式类
implicit class FileRead(file: File){
//定义一个读文件的功能
def read = Source.fromFile(file).mkString
}
def main(args: Array[String]): Unit = {
var file = new File("D://test//a.log")
file.read
}
}
泛型
import HelloWorld4.HelloWorld4
/**\
*泛型就是类型约束
*/
abstract class Message[T] (context:T)
//继承时指定泛型
class HelloWorld(context:String) extends Message(context)
class HelloWorld2[String](context:String) extends Message[String](context)
//多个泛型
class HelloWorld3[A,B,C](cloth:A,size:B,color:C)
//枚举类
object HelloWorld4 extends Enumeration {
type HelloWorld4 = Value
val 上衣,裤子,鞋 = Value
}
object testEnum{
def main(args: Array[String]): Unit = {
//给泛型指定类型值
val a = new HelloWorld3[HelloWorld4,Int,String](HelloWorld4.上衣,30,"黄色")
}
}