无效的模块中的鸡计划(使用)和(导入)

时间:2015-12-16 01:38:39

标签: scheme chicken-scheme

我在几个项目中遇到过这个问题,但是这个测试用例删除了解决问题所不必要的一切。我一直在用它来弄清楚错误:

所以我有一个包含2个文件的目录,foo.scmbar.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

简而言之,我毫无希望地感到困惑。任何人都可以解释发生了什么,以及如何解决它?

1 个答案:

答案 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一样。