"T =:= Int = null"在 Scala 中是什么意思?



如下面的代码。

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部分是什么意思?


注意:这个例子是我编造的。如果您能向我展示= null的正确用法(如果它不合适),那就更好了。

null只是为ev分配默认值,就像您为任何其他参数分配默认值一样。这是找出类型是否真的是Int的聪明方法:

 def isInt[T](implicit ev: T =:= Int = null): Boolean = env != null
 isInt[Int] // true
 isInt[String] // false

诀窍是,当编译器看到Int时,它将传入实际的隐式值,当它找不到隐式值时,它会将其保留为默认值。因此,通过检查ev是否null,您可以判断隐式是否在调用站点可用。

最新更新