Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Scala中查找所有非合成方法/函数的类型签名_Scala_Scala Macros_Scalac_Scala Compiler_Scala Reflect - Fatal编程技术网

在Scala中查找所有非合成方法/函数的类型签名

在Scala中查找所有非合成方法/函数的类型签名,scala,scala-macros,scalac,scala-compiler,scala-reflect,Scala,Scala Macros,Scalac,Scala Compiler,Scala Reflect,我正试图找到一种方法来获取Scala编译器的符号表,并转储特定SBT项目中方法/函数的所有类型信息。我现在要做的是一个编译器插件,在打字机阶段之后就开始使用它 有点走来走去,我看着根镜像并检查它的info.decls字段,大致如下: def newPhase(prev: Phase): Phase = new StdPhase(prev) { def apply(unit: CompilationUnit): Unit = { val decls = global.Roo

我正试图找到一种方法来获取Scala编译器的符号表,并转储特定SBT项目中方法/函数的所有类型信息。我现在要做的是一个编译器插件,在打字机阶段之后就开始使用它

有点走来走去,我看着根镜像并检查它的info.decls字段,大致如下:

def newPhase(prev: Phase): Phase =
  new StdPhase(prev) {
    def apply(unit: CompilationUnit): Unit = {
      val decls = global.RootClass.info.decls
      val scalaz = decls.find(_.toString contains "scalaz")
      println(scalaz.get.info.decls.filter(x => !x.hasMeaninglessName))
它倒了很多东西,但是。。我仍然得到相当多的奇怪输出,比如类anonfun$reduce$nordered$1 extends


想知道我是否朝着正确的方向前进,如果是这样的话,我应该看些什么来获得项目中方法的类型签名呢?

你肯定朝着正确的方向前进了。您可以在中看到完整的解决方案。如您所示,有些符号是合成的,例如在源代码中使用了匿名函数。因此,您从提取的任何数据转储中提取这些符号的程度取决于您希望完成的特定任务