使用包阴影符号

2024-04-18

例如,我有这个包定义,它遮蔽了 COMMON-LISP:LISTEN :

(defpackage :shadows
  (:use :common-lisp)
  (:shadow #:listen)
  (:export #:listen))

然后我想使用另一个包中的这个包,比如说

(defpackage :light
  (:use :common-lisp
        :shadows))

如果我在使用包时无法真正覆盖 Common Lisp 符号,那么影子的目的是什么?


Simple

The :shadow论证defpackage http://clhs.lisp.se/Body/m_defpkg.htm影响包的定义shadows, 不是后来使用的shadows in light.

你需要使用shadowing-import http://clhs.lisp.se/Body/f_shdw_i.htm:

(defpackage #:shadows
  (:use #:common-lisp)
  (:shadow #:listen)
  (:export #:listen))
(defpackage #:light
  (:shadowing-import-from #:shadows #:listen)
  (:use #:common-lisp #:shadows))
(eq 'light::listen 'shadows:listen)
==> T
(describe 'light::listen)
==>
SHADOWS:LISTEN is the symbol SHADOWS:LISTEN, lies in #<PACKAGE SHADOWS>,
is accessible in 2 packages LIGHT, SHADOWS.

 #<PACKAGE SHADOWS> is the package named SHADOWS.
 It imports the external symbols of 1 package COMMON-LISP and
 exports 1 symbol to 1 package LIGHT.

Bulk

如果您需要进行批量阴影,则需要使用单独的函数 (make-package http://clhs.lisp.se/Body/f_mk_pkg.htm, import http://clhs.lisp.se/Body/f_import.htm, export http://clhs.lisp.se/Body/f_export.htm, shadow http://clhs.lisp.se/Body/f_shadow.htm, use-package http://clhs.lisp.se/Body/f_use_pk.htm):

(defparameter *my-shadow-list* '(#:car #:cdr))
(make-package '#:my-package :use nil)
(import *my-shadow-list* '#:my-package)
(export *my-shadow-list* '#:my-package)
(shadow *my-shadow-list* '#:my-package)
(use-package '#:cl '#:my-package)
(make-package '#:my-user)
(shadowing-import *my-shadow-list* '#:my-user)
(use-package '(#:cl #:my-package) '#:my-user)
(describe 'my-user::car)
==>
MY-PACKAGE:CAR is the symbol MY-PACKAGE:CAR, lies in #<PACKAGE MY-PACKAGE>,
is accessible in 2 packages MY-PACKAGE, MY-USER.

 #<PACKAGE MY-PACKAGE> is the package named MY-PACKAGE.
 It imports the external symbols of 1 package COMMON-LISP and
 exports 2 symbols to 1 package MY-USER.

你可能会发现macroexpand-1 http://clhs.lisp.se/Body/f_mexp_.htm对于决定如何到达您需要去的地方很有用:

(macroexpand-1 '(defpackage #:light
                 (:shadowing-import-from #:shadows #:listen)
                 (:use #:common-lisp #:shadows)))
==>
(EVAL-WHEN (:COMPILE-TOPLEVEL :LOAD-TOPLEVEL :EXECUTE)
 (SYSTEM::%IN-PACKAGE "LIGHT" :NICKNAMES 'NIL :USE 'NIL :CASE-SENSITIVE NIL
  :CASE-INVERTED NIL)
 (SYSTEM::SHADOWING-IMPORT-CERROR "LISTEN" "SHADOWS" NIL "LIGHT")
 (USE-PACKAGE '("COMMON-LISP" "SHADOWS") "LIGHT") (FIND-PACKAGE "LIGHT")) ;
T

附言。对于代码可读性而言,隐藏 ANSI CL 标准名称并不是一个好主意。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用包阴影符号 的相关文章

  • CLISP - 反转简单列表

    我必须反转简单 单维 列表的元素 我知道有一个内置的反向函数 但我不能用它来做这个 这是我的尝试 defun LISTREVERSE LISTR cond lt length LISTR 2 LISTR listr is 1 atom or
  • Common Lisp 中的(随机)不那么随机?

    好的 最后一个问题 我将用 Common Lisp 完成我的猜数游戏 D 每当游戏开始 或者在第一个游戏之后开始新游戏 时 都会调用以下函数 Play the game defun play If it s their first time
  • R:从包中覆盖函数的正确方法是什么?

    我使用的是 R 包 其中有 2 个函数 f1 和 f2 其中 f2 调用 f1 我想覆盖函数f1 由于 R 2 15 和包中命名空间的强制使用 如果我只是获取新函数 它确实可以在全局环境中使用 即 只需在控制台中调用 f1 x 即可返回新结
  • 如何定义和使用 Common Lisp 包(库)?

    我在几个 Lisp 源文件中开发了一些 Common Lisp 函数 我希望这些函数可以轻松地供我编写的其他函数使用 或者如果我认为它们对其他人有用的话 可以在 github 上提供 现在 我只是将它们放在一些预定义的文件夹中并使用 req
  • 任意类型说明符上的 Defmethod?

    我想做的是 defgeneric fn x defmethod fn x integer 1 Positive integer defmethod fn x integer 1 Negative integer 我想要一个可以与任意类型说明
  • Java 包结构中的模块与层

    我曾经把所有东西都放在这样的包中 com company app module1 com company app module2 但它使得基于包的 AOP 切入点变得困难 并导致需要 IDE 才能理解的巨大包 所以现在我意识到我需要一个更深
  • sensio/framework-extra-bundle 包已被放弃

    当我想将 symfony 从 6 1 升级到 6 2 时 我看到了这条消息 Package sensio framework extra bundle is abandoned you should avoid using it Use S
  • 更新嵌入数据,例如 sysdata.rda

    我最近向 CRAN 提交的内容被退回了 因为我有一份关于全球环境的作业 但现在这已引起人们的不满 我有一个嵌入式数据集 sysdata rda 其中包含基于用户所在州 如美国 的配置参数 我希望当新用户使用该程序时可以更新此嵌入数据集 我之
  • 将列表传播到父代 sexp 中

    在任何 lisp 中是否有一种形式可以在父 sexp 中 传播 列表 喜欢 spread 1 2 3 gt 1 2 3 有两种方法可以做到这一点 哪个更好取决于您最终想要什么 一般来说 您可以使用 inside 反引号 表格如下 被评估以生
  • 这是一个有效的 java 包名称吗? [复制]

    这个问题在这里已经有答案了 可能的重复 您在 Java 中的个人 爱好项目中使用什么包命名约定 https stackoverflow com questions 292169 what package naming convention
  • 为什么在基于 Lisp 的语言中习惯上将许多右括号放在一行上?

    通常代码如下所示 one thing another thing arg1 f arg5 r another thing arg1 f arg5 r 为什么不喜欢这样 one thing another thing arg1 f arg5
  • 导入 matplotlib 时 numpy 的版本错误

    When I import matplotlib 我没有收到任何错误 但是当我 import matplotlib pyplot I get RuntimeError module compiled against API version
  • 人们可以放心地忽略宏和内置宏之间的区别吗?

    我从 Clojure 开始 这也是我的第一个 lisp 显然有很多东西需要吸收 为了减轻认知负担 我尝试找到我可以安全地忽略的部分 目前 人们能否安全地以相同的方式处理带有宏的表单和带有内置函数的表单 或者是否会出现以后出现的陷阱 换句话说
  • R - 安装插入符号包时出错

    gt Error in loadNamespace j lt i 1L c lib loc libPaths gt versionCheck vI j namespace pbkrtest 0 4 2 is being gt loaded
  • Common Lisp 鼠标位置与 ltk

    我正在 Common Lisp 中制作一个简单的小程序 我想使用鼠标移动来控制它 我用 LTK 作为窗口 我找不到任何可以检索鼠标位置的函数 例如 Emacs Lisp 有 鼠标像素位置 我发现这在罗塞塔代码上 https rosettac
  • Matlab:在类中导入函数

    我在 Matlab 中有一个类文件 我使用包规范创建了 i 目录结构 MyPkg F1 F2 F3 fun m myc m 我的班级是myc并将其插入包装中MyPkg 一个功能fun保存在子包中F3在主要的一处 我想使用函数fun在我的课堂
  • 有没有办法使用 emacs 安装 R 包?

    我正在使用 ESS 但每次需要安装新软件包时 我都必须使用 R gui 有没有办法在不离开 emacs 的情况下做到这一点 From help Startup Example of Rprofile site local add MASS
  • r-base 和 r-推荐包之间的区别

    谁能告诉我基本包和推荐包之间有什么区别 如果有提到基本包和推荐包的链接 请提供链接 差异实际上来自 R Core 和 R 代码的组织方式 例如在上游 SVN 存储库中 In src library 您拥有所有 基本 包 base 编译器 数
  • 在 Common Lisp 中编写 Lambda 表达式

    我目前正在阅读 Paul Graham 的 ANSI Common Lisp 并且有一个关于编写 lambda 表达式的问题 我们是否需要在 lambda 表达式前面加上前缀 如果我在 REPL 中写这样的东西 它会工作得很好 gt lam
  • 编写一个带有导入子路径打字稿选项的包

    我写了一个包让我们称之为commons以及导入它的另一个项目 我不想导入整个包 而只想导入该包的一个子路径 import client from commons clients 代替import client from commons 我见

随机推荐

  • 如何设计插件系统才能不浪费这么多资源?

    我正在尝试建立一个基本的插件系统 https stackoverflow com a 3356922 99923就像您在 WordPress 等 CMS 中常见的那种 您有一个插件文件夹 它们通过使用事件通知的方式与主系统的操作相关联Obs
  • 寻找组合 selectize 和 textInput 的快捷方式

    我正在尝试为数据库构建一个有点复杂的 CRUD 接口 创建 读取 更新和删除 可能闪亮不是最好的工具 但我想尝试一下 因为我不熟悉 js 我已经找到了一些很好的例子 特别是来自Barbara https github com bborges
  • 如何解决类似 fb 的框上的 HTML5 验证错误?

    如何解决与 Facebook Like 按钮相关的 HTML 5 验证错误 这是来自验证引擎的文本 第 3170 行 第 261 列 元素名称fb like box不能表示为 XML 1 0 rue border color stream
  • FileSink、StringSink、Filesource、StringSource Crypto++ 之间有什么区别

    我正在读取图像 对其进行加密 然后解密 目标是最终循环并记录该过程完成所需的时间 目前我所拥有的它读取文件 然后加密它 加密它 然后根据恢复的数据创建另一个文件 我不需要用解密的图片创建另一个文件 以前我一直在使用StringSource
  • 碳场所格式和衰落

    如何将区域设置设置为带有格式的碳 我有日期 setlocale LC TIME ru RU UTF 8 Carbon setLocale ru dt Carbon now gt formatLocalized d M 我得到了一个月 25日
  • 在AngularJS中使用包含base64数据的变量加载图像src

    使用包含变量加载图像base64AngularJS 中的数据 我正在尝试找到从包含的变量加载图像源的正确方法base64编码图像数据 例如使用从画布中提取toDataURL 起初我只是尝试这样 img src image dataURL 其
  • Web 应用程序可以使用个人电话发送短信吗

    我有一个客户每月发送大约 5000 条 SMS 消息 他们目前正在 iPhone 上执行此操作 方法是将消息实际输入到手机中 我认为这些信息相当重复 并且通常是针对群体的 他们不使用在线消息网关的原因纯粹是成本 我们可以在澳大利亚使用网关
  • 动态创建 iframe 并为其附加 onload 事件

    我动态创建了一个 iframe 并添加了src归因于它 然后我将此 iframe 附加到页面正文中 知道我想附上onload向 iframe 发送事件以读取 iframe 内容 有人可以建议我该怎么做吗 frame document cre
  • 并发写入向量

    我知道可以同时读取std vector没有 坏 后果 因为这个操作可以被认为是线程安全的 但对于写操作却不能这样说 但是 我想知道这是否并不总是正确的 例如考虑到我的特定情况 我有一个std vector
  • 如何在不更改 equals 和 hashcode 的情况下插入集合

    我正在寻找建议 我有一个Person具有字符串firstName和字符串lastName的类 当我试图插入具有相同字符串的列表值时 例如 set add new Person firstName lastName set add new P
  • 代表当前登录到单独 Web 客户端的用户从 API 访问 MS Graph

    我正在开发一个 API ASP NET Core 可以通过单独托管的 Web 客户端 React 访问 两者都作为应用程序服务托管在 azure 上 客户端应用程序必须具有基于azure Ad的身份验证 单租户 最好由基于aad的azure
  • Bash:向带有空格的字符串添加额外的单引号

    当我尝试将参数作为变量传递给 bash 中的任何命令时 如果变量值有空格 我可以看到 bash 添加了额外的引号 我正在创建一个文件 some file txt 并将其添加到变量 file 中 我正在使用 file 并将其存储在另一个变量
  • 是否有必要将每个 ManagementObject 都处理掉?

    我注意到ManagementObject is IDisposable 但它也是从ManagementClass GetInstances and ManagementObjectSearcher Get 这是否意味着我需要处理遇到的每个对
  • MongoDB 将我的数据库自动设置为“测试”。如何改变呢?

    mongoose connect process env DATABASE URL useNewUrlParser true const MyModel mongoose model mymodel new Schema name Stri
  • WebBrowser 控件:“指定的转换无效。”

    我使用 WebBrowser 控件导航到 WordPress 博客的登录页面 页面加载正常 但每当我尝试从线程访问 WebBrowser 时 我得到一个特定的强制转换无效的异常 另外 在调试时 一切都会冻结大约 5 秒 调试时 我尝试访问控
  • 为什么 SpringJUnit4ClassRunner.withAfterClasses 方法会出现神秘的 MultipleFailureException 错误消息

    为什么我的 Spring 测试设置失败并出现以下不太有用的错误消息 感谢所有建议 JUnit 输出 java lang NoClassDefFoundError org junit runners model MultipleFailure
  • Jquery/Ajax cookie pt2

    继上一个问题之后 上一个问题 https stackoverflow com questions 3916829 jquery ajax cookie 如果检测到 cookie 我似乎无法 触发 ajax 调用 cookie 肯定已设置 并
  • 表单中 PHP 复选框的内爆数组

    我已经查看了内爆数组的多个示例 但无法弄清楚为什么我看不到是否选中了多个复选框 我能否获得有关需要添加哪些代码以及在哪里添加的帮助 谢谢 PHP 代码 to email protected cdn cgi l email protectio
  • 离散连续概率分布

    认识到这可能是一个统计问题和编码问题 假设我使用 Distributions jl 创建了一个正态分布 using Distributions mydist Normal 0 0 2 有没有一种好的 直接的方法可以离散化这样的分布以获得 P
  • 使用包阴影符号

    例如 我有这个包定义 它遮蔽了 COMMON LISP LISTEN defpackage shadows use common lisp shadow listen export listen 然后我想使用另一个包中的这个包 比如说 de