Scheme 模块中的鸡肉方案(使用)和(导入)不起作用
我在几个项目中遇到过这个问题,但是这个测试用例删除了理解这个问题所不需要的所有东西。我一直在用它来找出问题所在: 因此,我有一个包含两个文件的目录,Scheme 模块中的鸡肉方案(使用)和(导入)不起作用,scheme,chicken-scheme,Scheme,Chicken Scheme,我在几个项目中遇到过这个问题,但是这个测试用例删除了理解这个问题所不需要的所有东西。我一直在用它来找出问题所在: 因此,我有一个包含两个文件的目录,foo.scm,和bar.scm: ;;;foo.scm (module foo (baz) (import chicken scheme) (define (baz) (display "bazzer!\n"))) baz.scm无法在csi中运行,出现以下错误: Error: (import) during expansion
foo.scm
,和bar.scm
:
;;;foo.scm
(module foo (baz)
(import chicken scheme)
(define (baz)
(display "bazzer!\n")))
baz.scm无法在csi中运行,出现以下错误:
Error: (import) during expansion of (import ...) - cannot import from undefined module: foo
我已经检查了文档:use
应该将代码加载到内存中,然后导入它。我甚至运行了require
,函数use
分别用于加载代码。它运行顺利,只是导入失败了。我还尝试在csi中导入代码use
不起作用,但require
后跟import
起作用,即使这应该等同于use
简言之,我完全糊涂了。有人能解释一下发生了什么,以及如何修复吗?(使用foo)
和(导入foo)
都将尝试加载一个名为foo.import.so
或foo.import.scm的文件。这是一个所谓的“导入库”,其中包含编译模块所需的信息
这相当于C语言的“头文件”,需要它来实现单独的编译。例如,在交叉编译的情况下,有必要将导入库加载到构建机器上的编译器中,但库本身将加载到目标机器上的程序中
使用csc
编译foo时,可以使用-J
或-J foo
生成此导入文件
require
过程在运行时工作,这意味着它更像是load
而不是use
。我想你把它和require extension
混淆了,这就像use
不,我用的是require,因为这是一个需要在后台调用扩展名的过程。检查山雀。另外,我尝试了这个,得到:错误:未绑定变量:foo#baz
我需要添加另一个编译还是什么?我不知道。如果你遇到了那个错误,你可能只使用了import
;它表示它知道baz
应该解析为foo
模块,但它本身没有实际的定义(意味着它还没有加载代码)。您需要加载
(或要求
)和导入
(或只使用
)。
Error: (import) during expansion of (import ...) - cannot import from undefined module: foo