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()
,该对象的语法是编译器无法理解的,因此它转向隐式。在第二个示例中,您声明了一个符号,但对它不做任何操作,语法与编译器的解析一致,因此它不会查看隐式