根据http://docs.scala-lang.org/tutorials/tour/implicit-parameters.html,它说
有资格传递给隐式参数的实际参数分为两类:
- 首先,符合条件的是所有标识符x,可以在没有前缀的方法调用点访问,并且表示隐式定义或隐式参数
这里让我感到困惑的是,“没有前缀”是什么意思?
答案 0 :(得分:2)
以下是一个例子:
implicit val i = "hello" //> i : String = hello
object Inner {
implicit val j = "goodbye"
}
def foo(implicit s: String) = println(s)
foo("explicit") //> explicit
foo(Inner.j) //> goodbye
foo //> hello
在调用i
时可以看到 foo()
,因此可以将其视为隐式参数。 j
是Inner
对象的成员,因此在没有前缀的情况下无法访问,即Inner.j
,因此只能明确传递。要访问没有前缀的j
,以便它有资格成为隐式参数,我们必须导入它:
object Inner {
implicit val j = "goodbye"
}
def foo(implicit s: String) = println(s)
import Inner._
foo //> goodbye