Scala反射:如何列出范围内的所有变量?

Mou*_*Dog 6 reflection variables scala

如何在范围/环境/绑定中列出所有"变量"(不仅仅是变量)的名称和/或值?

为了澄清,在程序/脚本的中间或在REPL的某个点,我需要(1)生成列表或(2)打印可由Scala语句访问的所有实体的列表.

Raf*_*ele 1

这在运行时是不可能的——至少不是你想要的方式——因为 JVM 没有被组织为一个巨大的符号表,在每个语句之后更新,你可以随时查询并找到命名实体,正如你所说的那样(我认为跨语言和环境都是如此)。

您可以尝试查询确实组织为表的内容,例如类/接口的方法,但在进行查询之前您必须知道类的完全限定名称。举一个简单的例子,根据类加载的工作原理,JVM 甚至无法枚举您可以创建哪些类,因为新类可以动态创建或从某个存储库检索。再举个例子,import' 在运行时甚至不存在......

你必须缩小你的要求。例如,如果您的目标是 REPL,您也许能够(但工作量很大)修改它以扰乱其内部数据结构。类似地,如果您以脚本为目标并可以访问源代码,那么理论上您可以使用可以完成您需要的工作的插件来修改编译器。请注意,我只提到了这些事情,但绝不会考虑自己做这样的事情,因为这需要付出很多努力,而且我看不到任何真正的需要。