Scala中带符号参数的隐式函数

Scala中带符号参数的隐式函数,scala,symbols,implicit,Scala,Symbols,Implicit,为什么打印以下代码: class TestClass{ case class printClass(s: Symbol) { def pr() = println(s); } implicit def implPrint(i: Symbol) = printClass(i) } object TestObject extends TestClass{ def main(args:Array[String]) = { 'x pr } } 而下面的代码没有:

为什么打印以下代码:

class TestClass{
  case class printClass(s: Symbol) {
    def pr() = println(s);
  }
  implicit def implPrint(i: Symbol) = printClass(i)
}

object TestObject extends TestClass{
  def main(args:Array[String]) = {
    'x pr
  }
}
而下面的代码没有:

class TestClass{
  implicit def implPrint(i: Symbol) = println(i)
}

object TestObject extends TestClass{
  def main(args:Array[String]) = {
    'x

    ()
  }
}

据我所知,如果编译器认为调用隐式函数是个好主意,它会自动调用隐式函数。为什么编译器在这两种情况下都不调用
implPrint()
?这里我忽略了什么?

隐式方法仅在需要时调用,否则会出现许多意外行为。在这里,您不会调用它不包含的方法,或者如果它被传递给需要其他类型变量的方法,则不会调用“implPrint”。

当编译器无法理解手头代码的语法时,编译器会考虑隐式。在第一个示例中,您试图对一个Symbol对象调用
pr()
,该对象的语法是编译器无法理解的,因此它转向隐式。在第二个示例中,您声明了一个符号,但对它不做任何操作,语法与编译器的解析一致,因此它不会查看隐式