【问题标题】:Why cannot use implicit in this scenario?为什么不能在这种情况下使用隐式?
【发布时间】:2014-09-21 05:31:16
【问题描述】:

这段代码编译:

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

【问题讨论】:

标签: scala


【解决方案1】:

implicit 是不能这样使用的关键字。你正在寻找implicitly,它位于Predef:

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

或者:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-07
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多