gpt4 book ai didi

export - Common Lisp 从包中导出符号

转载 作者:行者123 更新时间:2023-12-04 00:42:39 24 4
gpt4 key购买 nike

有没有一种从包中导出所有符号的捷径,或者它是在defpackage 中实现它的唯一方法吗? .我通常将我的代码写在一个文件中 foo.lisp通常以 (in-package :foo) 开头并将包定义放入文件package.lisp这通常涉及到这样的事情:

(in-package :cl-user)

(defpackage :foo
(:use :cl)
(:documentation "Bla bla bla."
(:export :*global-var-1*
:*global-var-2*
:function-1
:function-2
:struct
:struct-accessor-fun-1
:struct-accessor-fun-2
:struct-accessor-fun-3
:struct-accessor-fun-4))

我的问题是:使用一些全局变量和函数来简单地设计一个接口(interface)有时可能是不够的,你必须导出一些结构。在这种情况下,如果您不简单地导出此结构的访问器函数,则无法操作这些结构的对象。那么,有没有一种简单的方法可以在不手动导出所有这些访问器函数的情况下实现这种效果?

最佳答案

编写导出定义是一件苦差事——尤其是在涉及结构的情况下。
虽然 - 正如其他答案所示,可以有更复杂的方法,
这是我通常做的:

  • 编写包和实现,(:export)包定义中的列表为空。
  • 然后,我调用我的小助手函数,它列出了所有 fboundp以复制和粘贴友好的方式包中的符号。
  • 然后,我将辅助函数的输出复制到 (:export)包定义的一部分并删除所有行 I 不要想导出。

  • 这是我的小助手函数,它也使用了一些已接受的答案。
    (defun show-all-fboundp-symbols-of-package
    (package-name
    &optional (stream t))
    (let ((pack (find-package package-name)))
    (do-all-symbols (sym pack)
    (when (eql (symbol-package sym) pack)
    (when (fboundp sym)
    (format stream ":~A~%" (symbol-name sym)))))))

    关于export - Common Lisp 从包中导出符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9743056/

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