如下代码所示。
class A[T] {
def add(n: Int)(implicit env: T =:= Int = null): Int = n + 1
}
object A extends App {
val a = new A[Int]
a.add(1) // 2
}我知道T =:= Int的意思是T应该是Int类型,但是= null部件是什么意思呢?
Note:这个例子是我编的。如果= null不合适,最好能向我展示它的正确用法。
发布于 2017-10-08 01:30:46
null只是将一个默认值分配给ev,就像对任何其他参数一样。这是一种聪明的方法来确定类型是否实际上是一个Int。
def isInt[T](implicit ev: T =:= Int = null): Boolean = env != null
isInt[Int] // true
isInt[String] // false诀窍是,当编译器看到Int时,它将传递实际的隐式值,而当它找不到它时,它只会将其保留为默认值。因此,通过检查ev是否为null,您可以判断调用站点上是否存在隐式。
https://stackoverflow.com/questions/46626679
复制相似问题