为了账号安全,请及时绑定邮箱和手机立即绑定

Scala在哪里寻找植入?

Scala在哪里寻找植入?

MM们 2019-06-09 15:49:06
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?注:这个问题是由另一个问题,希望能更全面地说明这个问题。该示例是从那里复制的,因为答案中引用了该示例。
查看完整描述

2 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

我想知道隐式参数解析的优先级,而不仅仅是它查找的位置,所以我写了一篇博文。不征收进口税(和隐式参数优先级在得到一些反馈后)。

下面是清单:

  • 1)通过本地声明、导入、外部作用域、继承、不带前缀可访问的包对象,引出当前调用范围可见的内容。
  • 2) 隐范围

    ,它包含所有类型的伴随对象和包对象,这些对象与我们搜索的隐式类型(即类型的包对象、类型本身的伴生对象、类型构造函数(如果有的话)、参数(如果有的话)以及它的超类型和超特征之间有某种关系)。

如果在任何阶段我们发现不止一个隐含的静态重载规则被用来解决它。


查看完整回答
反对 回复 2019-06-09
  • 2 回答
  • 0 关注
  • 514 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信