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

标签 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{
  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/

相关文章:

java - Scala 在编译器镜像中返回 "error while loading package, Missing dependency ' 对象 java.lang.Object'"

symbols - 加载用于远程调试的符号

scala - 将工作分配给多个核心 : Hadoop or Scala's parallel collections?

c++ - 加载两个具有相同符号的共享库时是否存在符号冲突

c - 链接时加载符号文件

c - 警告 : implicit declaration of function - order of includes matter?

java - 如何在 Java 中从 Scala 传递通过包对象定义的隐式 val

scala - 映射到相同类型时,Scala 的 map() 是否应该表现不同?

java - Spark/scala 中的 SQL 查询

scala - 按位置对 ListBuffer 进行排序