【发布时间】:2015-04-30 17:58:17
【问题描述】:
给定一个 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”中哪些函数没有定义?
【问题讨论】:
-
你能举一个例子说明这样的测试会有用吗?
-
我正在为用户提交的代码构建一个自动化测试应用程序。我编写了一个简单的单元测试库,并将在 Poly/ML 的容器化实例中处理提交。计划是先加载提交的代码,检查是否编译,然后加载单元测试库,再加载具体提交的测试套件。当用户提交正确编译的代码,但他们未能实现在测试套件中测试的一种或多种方法时,就会出现问题。然后测试套件将无法编译,这是不可取的行为。
-
@AlexCoplan 不能强制用户提交的代码实现某个签名吗?
-
我不确定这可以单独使用解释器完成。也许使用外部解析器库来找出存在哪些定义?
-
我假设您想对现有功能进行评分并且只对不存在的功能进行惩罚?详细说明@AlexCoplan 的建议,您可以要求学生提供存根实现,即使是他们不知道如何实现的功能。