3 August 2022

scala 2.12 PreDef 源码阅读记录

  1. classOf[T] :stub method

  2. 区别 在于

    type Map[A, +B] = immutable.Map[A, B] //refer class or trait of Map
    
    val Map         = immutable.Map  // refer to object of Map
    
  3. 作用是

    type Manifest[T]      = scala.reflect.Manifest[T]
    
  4. require ,assert,assume 都有相同的的两种实现 有什么区别

    def require(requirement: Boolean)
    @inline final def require(requirement: Boolean, message: => Any)
    
  5. ??? 抛出 NotImplementedError 可以在开发阶段作为未完成方法的占位符

  6. ` implicit final class ArrowAssocA extends AnyVal` 提供 隐式方法 -> : a->b ==(a,b)==Tuple2(a,b) inline -> 和->有何区别 为什么 impiclt 构造器成员 self需要私有?

  7. implicit final class Ensuring[A](private val self: A) extends AnyVal 为所有AnyVal 提供断言

self Type

class A 
class B extends A   // B is an A
class S {self:A=>} // S request A

String Interpolation

(字符串插值)

raw"\\r\n"
f"%{Math.Pi}%.5f"
s"my name is ${name}"
//rewriting code at compile time
// 实现方式 
// 创建一个StringContext的隐式转换类
implicit class StringToColumn(val sc: StringContext) // spark 源码中有
$("col_a")== new StringToColumn()