Scala:隐式参数应为;没有前缀“;?

Scala:隐式参数应为;没有前缀“;?,scala,Scala,据报道,它说 有资格传递给隐式参数的实际参数分为两类: 首先,符合条件的是所有标识符x,它们可以在方法调用点访问,而无需前缀,并且表示隐式定义或隐式参数 让我困惑的是,“没有前缀”的含义是什么 implicit val i = "hello" //> i : String = hello object Inner { implicit val j = "goodbye" } def foo(implicit

据报道,它说

有资格传递给隐式参数的实际参数分为两类:

  • 首先,符合条件的是所有标识符x,它们可以在方法调用点访问,而无需前缀,并且表示隐式定义或隐式参数
让我困惑的是,“没有前缀”的含义是什么

  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
internal
对象的成员,因此没有前缀就无法访问,即
internal.j
,因此只能显式传递。要访问不带前缀的
j
,使其符合隐式参数的条件,我们必须导入它:

  object Inner {
     implicit val j = "goodbye"
  }

  def foo(implicit s: String) = println(s)

  import Inner._

  foo                                           //> goodbye
没有前缀意味着变量可以直接在上下文中找到?