我在几个项目中遇到过这个问题,但是这个测试用例删除了解决问题所不必要的一切。我一直在用它来弄清楚错误:
所以我有一个包含2个文件的目录,foo.scm
和bar.scm
:
;;;foo.scm
(module foo (baz)
(import chicken scheme)
(define (baz)
(display "bazzer!\n")))
;;;bar.scm
(module baz (quux)
(import chicken scheme)
(use foo)
(define (quux)
(baz)
(display "quuxed!\n")))
baz.scm无法在csi中运行此错误:
Error: (import) during expansion of (import ...) - cannot import from undefined module: foo
我已检查过文档:use
应将代码加载到内存中,然后import
。我甚至运行require
,函数use
分别用来加载代码。它顺利运行,它只是import
失败了。我还尝试在csi
中导入代码。 use
不起作用,但require
后跟import
确实有效,即使这应该等同于use
。
简而言之,我毫无希望地感到困惑。任何人都可以解释发生了什么,以及如何解决它?
答案 0 :(得分:0)
var parameters = this.login_form.serializeArray(true);
parameters.push({ name: "mysql", value: "update" });
// remaining code to make ajax request
和(use foo)
都会尝试加载名为(import foo)
或foo.import.so
的文件。这是一个所谓的"导入库",它包含编译模块所需的信息。
这与"头文件"相当。对于C,需要它才能使单独的编译成为可能。例如,在交叉编译的情况下,有必要将导入库加载到构建计算机上的编译器中,但库本身将加载到目标计算机上的程序中。
使用foo.import.scm
编译foo时,您可以使用-J
或-j foo
生成此导入文件。
csc
程序在运行时工作,这意味着它更像require
而不是load
。我认为您将其与use
混淆,就像require-extension
一样。