spark
2018.11.4
1.scala的隐式转换和隐式参数
1.1 定义: scala允许手动指定,将某种类型的对象转换成其他类型的对象
定义隐式转换函数,即implicit conversion function
函数命名规则一般建议 "one2one"
1.2 getClass 获取某个对象属于哪个类
classOf 检测对象是否是某个类的对象而不是其子类
isinstanceOf 检查某个对象是否属于某个类 a.isinstanceOf[b] 判断对象a是否属于b类,返回布尔类型
asinstanceOf 将引用类型转换为子类的引用
1.3 使用隐式转换加强现有类型(例子:超人变身)
1.4 隐式转换的作用域(仅仅在需要隐式转换的地方,比如某个函数或方法内,用import导入隐式转换函数)与使用时机
①调用某个函数,但是给函数传入的参数类型与函数定义的接受收参数的类型不匹配(例子:特殊售票窗口)
implicit def object2SpecialPerson(obj:Object):SpecialPerson = {}
②使用某一个类型的对象,调用某个方法,而这个方法并不存在与该类型时(例子:超人变身)
③使用某一个类型的对象,调用某一个方法,虽然该类型有这个方法,但是给方法传入的参数类型,与方法定义的接受参数的类型不匹配
(例子:特殊售票窗口加强版)
1.5 隐式参数:在函数或方法中,定义一个用implicit修饰的参数,此时scala会尝试找到一个指定类型,用implicit修饰的对象,并注入参数
例子:考试签到
class SignPen{def write(content:String)=println(content)}
implicit val signPen = new SignPen
def signForExam(name: String)(implicit signPen: SignPen){signPen.write(name+"come to exam in time")}
2.Actor与Akka
2.1 并发编程
actor:一个容器,一个封装了状态和行为的对象,每个actor都通过message交流,从自己的mailbox中读取别的actor发送的消息
Akka
2.2 case class :最重要的特点支持模式匹配
/**
* case class 示例
*/
abstract class Person
case class Student(name:String,sno:Int) extends Person
case class Teacher(name:String,tno:Int) extends Person
case class None(name:String) extends Person
object CaseClassTest extends App {
def caseClassMatch(p:Person) = p match{
case Student(name,sno) => println(name + " is a student,sno is:" + sno)
case Teacher(name,tno) => println(name + " is a teacher,tno is:" + tno)
case None(name) => println("None matched")
}
val p = Student("yy",20151214)
caseClassMatch(p)
}
2.3 actor的工作模式
actor就是对象发送与接收消息的过程,消息可以是任何类型但必须是不可变的(eg:String,Int,Boolean,case class,tuple,list,map)
2.4 发送消息
① ! 表示异步发送一个消息并立即返回,也称"tell"
② ?表示异步发送一个消息并返回一个future-代表一个可能的回应,也称"ask"
scala-隐式转换,actor
猜你喜欢
转载自blog.csdn.net/qq_33068519/article/details/83717126
今日推荐
周排行