如何列出所有可用的隐式转换?

时间:2016-09-14 06:45:51

标签: scala

我知道在SCALA中我可以通过定义一些隐式函数将类型转换为另一种类型,我的问题是,我如何知道在导入大量软件包后我可以使用哪些转换?

例如,我有一个字符串,而且我怎么知道它可以转换为什么类型?

编辑澄清一下,我想在我的scala编译插件中执行它,所以我可能需要在一个reflect.api.tree类型上调用一个函数,然后得到implicits。我正在寻找一些方法来使用答案中提到的隐式[]。

3 个答案:

答案 0 :(得分:5)

在REPL中,您可以调用:implicits来查看除Predef中可用的范围之外的所有范围内隐含。 (添加-v以查看Predef含义。)

您还可以从代码中的任何位置调用implicitly[]函数来测试特定的含义。

scala> implicitly[String => Seq[Char]]
res0: String => Seq[Char] = <function1>

scala> implicitly[String => Array[Char]]
<console>:12: error: No implicit view available from String => Array[Char].
       implicitly[String => Array[Char]]
                 ^

答案 1 :(得分:2)

scala repl 中,您可以使用:implicits -v在此上下文中列出所有implicits,例如:

/* 69 implicit members imported from scala.Predef */
  /* 7 inherited from scala */
  final implicit class ArrayCharSequence extends CharSequence
  final implicit class ArrowAssoc[A] extends AnyVal
  final implicit class Ensuring[A] extends AnyVal
  final implicit class RichException extends AnyVal
  final implicit class SeqCharSequence extends CharSequence
  final implicit class StringFormat[A] extends AnyVal
  final implicit class any2stringadd[A] extends AnyVal
  ...

答案 2 :(得分:0)

虽然我接受了jwvh的答案,但他的回答只适用于普通用户。我喜欢在编译器插件中执行它的一个棘手的方法,代码不是常用的,所以我不在这里粘贴它,如果你们有兴趣了解如何在编译器插件中获取所有隐式值,你可以参考我的github Scala-completion-Base