Scala的底层通信与隐式转换

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,"黄色")
    
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值