标准库
Scala Package
Any
| 1 | class Any{ | 
| 1 | 1.asInstanceOf[String] // 报错,未定义隐式转换函数 | 
Option
| 1 | class Option[T]{ | 
- 推荐使用 - Option类型表示可选值,明示该值可能为- None
- Option类型可以被迭代- Some(s):唯一迭代- s
- None:空
 - 1 
 2- val a = Some("hello") 
 a.foreach(x => println(x.length))
Predef
| 1 | object Predef extends LowPriorityImplicits{ | 
List
collection
mutable
Map
| 1 | val a=Map((3,4), 5->6) | 
immutable
reflect
runtime
universe
universe:提供一套完整的反射操作,可以反思性的检查 类型关系,如:成员资格、子类型
| 1 | // 返回类型`T`“类型值”,可以用于比较 | 
TypeTag
- TypeTag:提供编译时具体类型的信息- 能获取准确的类型信息,包括更高的泛型类型
- 但无法获取运行时值的类型信息
 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14- import scala.reflect.runtime.universe.{TypeTag, TypeRef, typeTag} 
 // 声明隐式参数列表
 def recognize[T](x: T)(implicit tag: TypeTag[T]): String =
 tag.tpe match {
 case TypeRef(utype, usymbol, args) =>
 List(utype, usymbol, args).mkString("\n")
 }
 val list: List[Int] = List(1,2)
 val ret = recognize(list)
 // 显式实例化`TypeTag`
 val tag = typeTag[List[String]]
- WeakTypeTag:提供编译时包括抽象类型的信息- WeakTypeTag可以视为- TypeTag的超集
- 若有类型标签可用于抽象类型,WeakTypeTag将使用该标记
 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18- import scala.reflect.runtime.universe.{WeakTypeTag, TypeRef, weakTypeRef} 
 // 声明隐式参数列表
 def recognize[T](x: T)(implicit tag: WeakTypeTag[T]): String =
 tag.tpe match {
 case TypeRef(utype, usymbol, args) =>
 List(utype, usymbol, args).mkString("\n")
 }
 abstract class SAClass[T]{
 // 抽象类型
 val list: List[T]
 val result = Recognizer.recognize(list)
 println(result)
 }
 new SAClass[Int] { val list = List(2,3)}
 // 显式实例化`WeakTypeTag`
 val tag = weakTypeTag[List[String]]
- 当需要
TypeTag[T]、WeakTypeTag[T]类型的隐式值tag时, 编译器会自动创建,也可以显式实例化- 以上类型探测通过反射实现,编译器根据传递实参推断泛型 参数
T,由此确定特定类型标签隐式值
ClassTag
ClassTag:提供关于值的运行时信息
- 不能在更高层次上区分,如:无法区分List[Int]、List[String]
- 是经典的老式类,为每个类型捆绑了单独实现,是标准的 类型模式
| 1 | import scala.reflect.{ClassTag, classTag} | 
- 当需要 - ClassTag[T]类型的隐式值- ct时,编译器会自动创建- 也可以使用classTag显式实例化
 
- 也可以使用
- ClassTag[T]类型值- ct存在时,编译器将自动- 包装(_:T)类型模式为ct(_:T)
- 将模式匹配中未经检查的类型测试模式转换为已检查类型
 
- 包装
util
matching
Regex
| 1 | import scala.util.matching.{Regex, Match} | 
| 1 | val keyValPattern: Regex = "([0-9a-zA-Z-#() ]+): ([0-9a-zA-Z-#() ]+)".r | 

