这是方法签名示例:
someMethod [A <: BaseType : SecondType : ClassTag]
trait BaseType {}
trait SecondType[A] {}
Run Code Online (Sandbox Code Playgroud)
ClassTag是scala.reflect.ClassTag
":"是什么意思?
BaseType是否会影响SecondType或/和ClassTag参数化?
对我来说,当我看到[A <: BaseType]我理解我应该调用someMethod实现/扩展特征的类型参数BaseType,但是还有其他参数用于什么?
这对某人来说可能是显而易见的,但是:
scala> trait X[A] ; trait Y[A]
scala> def f[A : X : Y] = 42
Run Code Online (Sandbox Code Playgroud)
产量
def f[A](implicit evidence$1: X[A], evidence$2: Y[A]) = 42
Run Code Online (Sandbox Code Playgroud)
在-Xprint:parser.所以它想要X [A]和Y [A].