2
Scala在哪里寻找隐式?
一个隐含的新人Scala的问题似乎是:在哪里呢编译器找implicits?我的意思是隐含的,因为这个问题似乎从来没有完全形成,就好像没有言语。:-)例如,integral下面的值从哪里来? scala> import scala.math._ import scala.math._ scala> def foo[T](t: T)(implicit integral: Integral[T]) {println(integral)} foo: [T](t: T)(implicit integral: scala.math.Integral[T])Unit scala> foo(0) scala.math.Numeric$IntIsIntegral$@3dbea611 scala> foo(0L) scala.math.Numeric$LongIsIntegral$@48c610af 决定学习第一个问题的答案的另一个问题是,在某些明显的模棱两可的情况下,编译器如何选择要使用的隐式变量(无论如何还是要编译)? 例如,scala.Predef定义了两次转换String:从到WrappedString,再到到StringOps。但是,这两个类共享许多方法,所以为什么Scala在调用时不抱怨歧义map? 注意:这个问题是由另一个问题启发而来的,希望以更笼统的方式说明问题。该示例是从那里复制的,因为答案中已提及该示例。