Scala:隐式参数应该是#34;没有前缀"?

时间:2015-03-25 08:26:47

标签: scala

根据http://docs.scala-lang.org/tutorials/tour/implicit-parameters.html,它说

  

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

     
      
  • 首先,符合条件的是所有标识符x,可以在没有前缀的方法调用点访问,并且表示隐式定义或隐式参数
  •   

这里让我感到困惑的是,“没有前缀”是什么意思?

1 个答案:

答案 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(),因此可以将其视为隐式参数。 jInner对象的成员,因此在没有前缀的情况下无法访问,即Inner.j,因此只能明确传递。要访问没有前缀的j,以便它有资格成为隐式参数,我们必须导入它:

  object Inner {
     implicit val j = "goodbye"
  }

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

  import Inner._

  foo                                           //> goodbye