Racket跨文件模块单元测试问题:无法识别模块内标识符
解决Racket模块函数未绑定的问题
你的问题出在avl_tree.rkt的模块写法错误:你用(module avl_tree racket ...)把代码包裹成了文件内部的子模块,而非将整个文件作为独立模块。此时provide仅导出子模块内的函数,但测试文件require的是文件顶层环境,并未导入子模块内容,因此找不到is_tree?。
正确的模块写法
修改avl_tree.rkt,去掉外层的(module ...)包裹,直接用#lang racket作为文件开头:
#lang racket (provide all-defined-out) (define (is_tree? tree) ; 这里写你的实现逻辑 #t) ; 示例返回值,替换成实际代码 ; 其他函数定义...
测试文件无需修改
你的avl_tree_testing.rkt写法没问题,修改完模块文件后,直接运行测试文件就能正常调用is_tree?:
#lang racket (require rackunit) (require "avl_tree.rkt") (is_tree? '(5 (1 null null) (9 (6 null null) (10 null null))))
(可选)如果非要用内部子模块
若你坚持要在文件里用子模块写法,测试文件需要明确导入子模块:
#lang racket (require rackunit) (require (submod "avl_tree.rkt" avl_tree)) ; 导入子模块 (is_tree? '(5 (1 null null) (9 (6 null null) (10 null null))))
但这种写法没必要,独立模块文件推荐用第一种方式。
内容的提问来源于stack exchange,提问作者Spartacuz9er9er
相关产品推荐
相关产品推荐

