我正在练习使用隐式参数,据我从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
?
答案 0 :(得分:3)
您已使用空参数列表明确调用apply
方法。您应该使用隐式参数删除参数组的括号,但不能在没有括号的情况下隐式调用apply
方法。
您有两个选择:
1)明确地在没有括号的情况下调用apply
:
ImplicitUser.apply
2)将添加参数组添加到apply
方法:
object ImplicitUser {
def apply()(implicit env: Env) {
...
}
}
...
ImplicitUser()