Scala 什么是;T=:=Int=null";在斯卡拉是什么意思?
如下代码所示Scala 什么是;T=:=Int=null";在斯卡拉是什么意思?,scala,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分配一个默认值,就像你给任何其他
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
,您可以判断隐式是否在调用站点可用。因此它将Int
测试从编译时移动到运行时?听起来像是要避免的事情。@jwvh,不是测试本身。请参阅,“测试”是在未提供值的情况下搜索隐式表达式。在Dima的例子中,是“执行”一点也不测试。@jwvh承认,它不是很“主流”,但它有一些合法的用途。。。特别是,如果使用比=:=
更严格的约束。例如:def foo[T](条:T)(隐式ev:T