码迷,mamicode.com
首页 > 其他好文 > 详细

scala 基础知识 FAQ

时间:2019-11-16 23:27:33      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:fine   sde   cti   rac   lse   err   new   match   ase   

问题1: 抽象成员初始化规则

① 父类先初始化

② 在初始化的过程中,如果 val 发生重写,只有最后一个重写生效。前面的会变成零值,后面的会直接继承。

参考资料:https://docs.scala-lang.org/tutorials/FAQ/initialization-order.html

示例:

abstract class A {
  val x1: String
  val x2: String = "mom"

  println("A: " + x1 + ", " + x2)
}
class B extends A {
  val x1: String = "hello"

  println("B: " + x1 + ", " + x2)
}
class C extends B {
  override val x2: String = "dad"

  println("C: " + x1 + ", " + x2)
}
new C

输出:

A: null, null
B: hello, null
C: hello, dad

解析: 

当一个 val 被重写时,只能初始化一次。例如,x2 在 B处初始化了,并且在 C处也初始化了,只有C处的生效。

如果 x2 同时在 B、C 两处初始化,打印的结果是

A: null, null
B: hello, null
C: hello, dad

如果 x2 仅在B处初始化则,打印的结果是

A: null, null
B: hello, dad
C: hello, dad

如果 x2不发生重写,初始值就是默认初始值。打印的结果是

A: null, mom
B: hello, mom
C: hello, mom

 

问题2: 偏函数

特性:

单参数的函数
不处理所有可能的输入,只处理那些能与至少一个 case 语句匹配的输入
可以用 isDefineAt 方法测试特定输入是否与偏函数匹配
偏函数之间可以链式连接

val pf1:PartialFunction[Any, String] = {case s:String => "YES"}
val pf2:PartialFunction[Any, String] = {case d:Double => "YES"}
val pf = pf1 orElse pf2

pf.isDefinedAt("d") // Boolean  
try { pf("d").toString } catch { case _:MatchError => "ERROR!" }

  

 

 

233

scala 基础知识 FAQ

标签:fine   sde   cti   rac   lse   err   new   match   ase   

原文地址:https://www.cnblogs.com/lemos/p/11874343.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!