gpt4 book ai didi

scheme - 模块中的鸡肉方案(使用)和(导入)不起作用

转载 作者:行者123 更新时间:2023-12-02 03:19:45 25 4
gpt4 key购买 nike

我在几个项目中遇到过这个问题,但是这个测试用例删除了理解这个问题所不需要的一切。我一直在用它来找出问题所在:

所以我有一个包含 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

简而言之,我感到非常困惑。任何人都可以解释发生了什么,以及如何解决它吗?

最佳答案

(use foo)(import foo) 都将尝试加载名为 foo.import.so 的文件foo.import.scm。这就是所谓的“导入库”,其中包含编译模块所需的信息。

这类似于 C 的“头文件”,并且需要它才能使单独的编译成为可能。例如,在交叉编译的情况下,需要将import library加载到build machine上的编译器中,但库本身 strong> 将加载到目标机器 上的程序中。

在使用 csc 编译 foo 时,您可以使用 -J-j foo 生成此导入文件。

require 过程在运行时运行,这意味着它更像 load 而不是 use。我认为您将它与 require-extension 混淆了,后者类似于 use

关于scheme - 模块中的鸡肉方案(使用)和(导入)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34302607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com