Scala在哪里寻找植入?

Scala在哪里寻找植入?

隐式对于Scala的新手来说,问题似乎是:编译器在哪里寻找隐式?我的意思是含蓄的,因为这个问题似乎从来没有完全形成,好像没有语言。-)例如,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])Unitscala> foo(0)scala.math.Numeric$IntIsIntegral$@3dbea611

scala> foo(0L)scala.math.Numeric$LongIsIntegral$@48c610af

对于那些决定学习第一个问题的答案的人来说,另一个问题是编译器如何选择在某些明显含糊不清的情况下使用哪一个隐式(但无论如何都是编译)?

例如,scala.Predef定义两个转换String*一至WrappedString另一个StringOps..然而,这两个类共享许多方法,那么为什么Scala在调用时不抱怨模糊性map?

注:这个问题是由另一个问题,希望能更全面地说明这个问题。该示例是从那里复制的,因为答案中引用了该示例。


MM们
浏览 516回答 2
2回答

守着一只汪

我想知道隐式参数解析的优先级,而不仅仅是它查找的位置,所以我写了一篇博文。不征收进口税(和隐式参数优先级在得到一些反馈后)。下面是清单:1)通过本地声明、导入、外部作用域、继承、不带前缀可访问的包对象,引出当前调用范围可见的内容。2) 隐范围,它包含所有类型的伴随对象和包对象,这些对象与我们搜索的隐式类型(即类型的包对象、类型本身的伴生对象、类型构造函数(如果有的话)、参数(如果有的话)以及它的超类型和超特征之间有某种关系)。如果在任何阶段我们发现不止一个隐含的静态重载规则被用来解决它。
打开App,查看更多内容
随时随地看视频慕课网APP