为什么不能在这种情况下使用隐含?

时间:2014-09-20 20:47:15

标签: scala

此代码编译:

trait Plus[A] {
  def plus(a1 : A , a2: A): A
}

def plus[A: Plus](a1: A, a2: A): A = implicitly[Plus[A]].plus(a1, a2)
//> plus: [A](a1: A, a2: A)(implicit evidence$1: day0.sumfunction.Plus[A])A

但如果我尝试使用:

def plus[A: Plus](a1: A, a2: A): A = implicit[Plus[A]].plus(a1, a2)

然后我收到编译错误:此行有多个标记 - 缺少参数类型 - 预期的标识符,但是' ['找到。

为什么我不能在这种情况下使用隐式?

此代码取自http://eed3si9n.com/learning-scalaz/polymorphism.html

1 个答案:

答案 0 :(得分:3)

implicit是一个无法像这样使用的关键字。您正在寻找位于implicitly的<{1}}:

Predef

或者:

def plus[A: Plus](a1: A, a2: A): A = implicitly[Plus[A]].plus(a1, a2)