4

给定一个 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”中的哪些函数没有定义?

4

1 回答 1

4

可能没有办法以可移植的方式执行此操作,但在 Poly/ML 中,您可以了解是否使用 PolyML.globalNameSpace 定义了一个值或其他任何内容。

要测试一个值(例如一个函数),请使用

#lookupVal PolyML.globalNameSpace

这需要一个名称并返回一个选项类型,如果值已定义,则返回 SOME,如果未定义,则返回 NONE。所以

#lookupVal PolyML.globalNameSpace "f";

将返回

SOME ?

尽管

#lookupVal PolyML.globalNameSpace "g";

将返回 NONE。

于 2015-04-30T09:58:17.700 回答