相关疑难解决方法(0)

明确的Subimplicits

请考虑以下代码:

class A { def print = println("A") }
class B extends A { override def print = println("B") }

def foo(implicit a: A) = a.print

def bar(implicit a: A) = {
  implicit val b = new B
  foo
}

bar(new A) // B
Run Code Online (Sandbox Code Playgroud)

我很奇怪,为什么呼吁foobar不提出一个ambiguous implicit values错误.当然

implicit val b: A = new B
Run Code Online (Sandbox Code Playgroud)

会引起这个错误.为什么foo选择隐式b而非隐式a?或者甚至更一般:将采取什么规则?

编辑:
由于我与Ivan的评论 - 我想澄清:如果我以与隐式方法参数相同的方式命名本地隐式val,我会知道我的问题的答案.

def bar(implicit a: A) = {
  implicit val a …
Run Code Online (Sandbox Code Playgroud)

scala implicit

5
推荐指数
1
解决办法
108
查看次数

标签 统计

implicit ×1

scala ×1