代码之家  ›  专栏  ›  技术社区  ›  scout

内部scala编译。使用Interactive.Global

  •  3
  • scout  · 技术社区  · 16 年前

    我正在尝试从scala souce文件中检索AST。我已将代码(仅相关代码)简化为以下代码。

    trait GetAST {
         val settings = new Settings
         val global = new Global(settings, new ConsoleReporter(settings))
         def getSt = "hello" //global.typedTree(src, true)
    }
    object Tre extends GetAST {
        def main(args:Array[String])
        {
            println(getSt.getClass)
            println("exiting program")
        }
    }
    

    以上代码编译良好,运行良好。但问题是程序不退出。打印“退出程序”后不显示提示。我必须用^C退出。 知道问题可能是什么吗

    2 回复  |  直到 16 年前
        1
  •  3
  •   Mirko Stocker    16 年前

    我相信Michael是正确的,编译器使用线程,因此JVM不仅仅是退出。

    好消息是 interactive.Global 混入 interactive.CompilerControl 特征 askShutdown 方法,您可以在主程序结束时调用以退出程序。

        2
  •  2
  •   michael.kebe    16 年前

    不知道什么 Settings , Global 和 ConsoleReporter 没有人能给你一个准确的答案。我想他们中至少有一个正在创建线程。JVM等待所有线程完成(或所有运行的线程都是守护进程线程)。见 here .

    我敢打赌如果你评论 settings 和 global 它将按预期退出。

    推荐文章