隐含不适用

时间:2013-08-07 04:17:55

标签: scala

我正在练习使用隐式参数,据我从scala网站了解到:

  

符合条件的是所有标识符x,可以在没有前缀的方法调用点访问,并且表示隐式定义或隐式参数。

所以我写了下面这段代码:

  class Env(str: String) {
    override def toString = str
  }
  object ImplicitUser {
    def apply(implicit env: Env) {
      println(env.toString)
    }
  }
  object Run {
    def apply() {
      implicit val myEnv = new Env("abc")
      ImplicitUser() // compiler error
    }
  }

错误让我困惑:

  • myEnv可以访问,没有前缀
  • myEnv是隐含值

那么为什么编译器不会自动将myEnv填入ImplicitUser.apply

1 个答案:

答案 0 :(得分:3)

您已使用空参数列表明确调用apply方法。您应该使用隐式参数删除参数组的括号,但不能在没有括号的情况下隐式调用apply方法。

您有两个选择:

1)明确地在没有括号的情况下调用apply

ImplicitUser.apply

2)将添加参数组添加到apply方法:

object ImplicitUser {
  def apply()(implicit env: Env) {
    ...
  }
}

...

  ImplicitUser()