检查函数是否在 SML 中定义
Check if function is defined in SML
给定一个 SML 源文件,是否可以检查(使用 Poly/ML)是否定义了 function/value 名称列表?如果可以,怎么做?
或者,我注意到您可以执行以下操作。假设我们有一个要检查的源文件,名为 somefile.sml
。假设我们创建文件test.sml
,内容如下:
use "somefile"
f; (* defined in somefile.sml *)
g; (* undefined *)
然后我们运行:
use "test" handle e as SyntaxError => (print (exnMessage e));
不幸的是,这只会打印出 "Static Errors"。有没有什么方法,类似于上面描述的,来确定(在代码中)"test.sml" 中哪些函数没有定义?
可能无法以可移植的方式执行此操作,但在 Poly/ML 中,您可以找出是否使用 PolyML.globalNameSpace.
定义了值或其他任何内容
要测试一个值(例如一个函数)使用
#lookupVal PolyML.globalNameSpace
这需要一个名称和 returns 一个选项类型,如果已定义该值则为 SOME,如果没有定义则为 NONE。
所以
#lookupVal PolyML.globalNameSpace "f";
将return
SOME ?
而
#lookupVal PolyML.globalNameSpace "g";
将 return NONE.
给定一个 SML 源文件,是否可以检查(使用 Poly/ML)是否定义了 function/value 名称列表?如果可以,怎么做?
或者,我注意到您可以执行以下操作。假设我们有一个要检查的源文件,名为 somefile.sml
。假设我们创建文件test.sml
,内容如下:
use "somefile"
f; (* defined in somefile.sml *)
g; (* undefined *)
然后我们运行:
use "test" handle e as SyntaxError => (print (exnMessage e));
不幸的是,这只会打印出 "Static Errors"。有没有什么方法,类似于上面描述的,来确定(在代码中)"test.sml" 中哪些函数没有定义?
可能无法以可移植的方式执行此操作,但在 Poly/ML 中,您可以找出是否使用 PolyML.globalNameSpace.
定义了值或其他任何内容要测试一个值(例如一个函数)使用
#lookupVal PolyML.globalNameSpace
这需要一个名称和 returns 一个选项类型,如果已定义该值则为 SOME,如果没有定义则为 NONE。 所以
#lookupVal PolyML.globalNameSpace "f";
将return
SOME ?
而
#lookupVal PolyML.globalNameSpace "g";
将 return NONE.