为什么打印下面的代码:
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'将不会被调用。
关于scala - Scala 中带符号参数的隐式函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43566764/