隐式参数需要类型注释才能编译



这是我的测试代码:

object ImplicitTest {
import JoesPrefs._
Greeter.greet("Joe") // could not find implicit value for parameter prompt: 
}
class PreferredPrompt(val preference: String)
object JoesPrefs {
implicit val prompt = new PreferredPrompt("Yes, master> ")
}
object Greeter {
def greet(name: String)(implicit prompt: PreferredPrompt) = {
println("Welcome, " + name + ". The system is ready.")
println(prompt.preference)
}
}

我使用scala 2.11.12,不知道为什么这个隐式不起作用,直到向val:添加类型注释

object JoesPrefs {
implicit val prompt: PreferredPrompt  = new PreferredPrompt("Yes, master> ")
}

因此,确切的内部有点疯狂,但基本上可以归结为代码的编译顺序。当您添加类型注释时,val是";编译并放入范围";早于不这样做的时候,它就可以在ImplicitTest中解决。

有趣的是(至少对我来说^^(,你也可以将ImplicitTest移动到JoesPref对象之后的一行代码上(或将其移动到自己的文件中(,它将在没有类型注释的情况下编译。

相关内容

  • 没有找到相关文章

最新更新