给定SML源文件,是否可以检查(使用Poly / ML)是否定义了函数/值名称列表?如果是这样,怎么样?
或者,我注意到您可以执行以下操作。假设我们有一个名为somefile.sml
的要检查的源文件。假设我们创建文件test.sml
,其中包含以下内容:
use "somefile"
f; (* defined in somefile.sml *)
g; (* undefined *)
然后我们运行:
use "test" handle e as SyntaxError => (print (exnMessage e));
不幸的是,这只打印出“静态错误”。是否有任何方法,与上述类似,确定(在代码中)未定义“test.sml”中的哪些函数?
答案 0 :(得分:4)
可能无法以此方式进行此操作,但在Poly / ML中,您可以查看是否使用PolyML.globalNameSpace定义了值或其他任何内容。
要测试值(例如函数),请使用
#lookupVal PolyML.globalNameSpace
这将获取一个名称并返回一个选项类型,如果已定义该值,则为SOME;如果尚未定义,则返回NONE。 所以
#lookupVal PolyML.globalNameSpace "f";
将返回
SOME ?
,而
#lookupVal PolyML.globalNameSpace "g";
将返回NONE。