1

据我从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是一个隐含值

那么为什么编译器不自动填充myEnvImplicitUser.apply

4

1 回答 1

3

apply您已使用空参数列表显式调用方法。您应该删除带有隐式参数的参数组的括号,但您不能隐式调用apply没有括号的方法。

您有 2 个选项:

apply1)不带括号显式调用:

ImplicitUser.apply

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

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

...

  ImplicitUser()
于 2013-08-07T04:34:47.977 回答