elisp:从内部函数捕获变量

2024-05-17

我可爱的功能:

(defun f (x)
  (lambda (y) (+ x y)))

然后,我期望这样:

(funcall (f 2) 2)

返回 4。但是可惜,我得到了这个:

Debugger entered--Lisp error: (void-variable x)

那么如何从内部函数中捕获变量呢?


您已经被 elisp 的动态作用域所困扰。这xlambda 中指的是变量x这是在调用 lambda 时的范围内(并且因为在这种情况下没有x当你调用它时,你会得到一个错误),而不是x当您创建 lambda 时,它就在范围内。

在 elisp 中模拟词汇闭包的一些方法在EmacsWiki 上的此页面 http://www.emacswiki.org/emacs/FakeClosures.

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

elisp:从内部函数捕获变量 的相关文章

  • 更改 emacs 文本模式的边距

    我发现根据自己的喜好更改 emacs 中的边距而又不会出现滑稽的情况的唯一方法是 add hook window configuration change hook lambda set window margins car get buf
  • 将 Emacs AUCTeX 与 Sumatra PDF 同步

    有了我的这些行init el我能够将 Emacs LaTeX 缓冲区与 Sumatra 同步 setq TeX source correlate mode t setq TeX source correlate method synctex
  • Emacs - 取消定义前缀键

    我设法将 M 大写 em 键定义为 sqlplus 模式下的前缀键 这阻止了我输入 M 如何在此模式下取消设置此前缀键 短期修复 M x local set key M self insert command 长期修复 请在 emacs 文
  • elisp 中的复数/虚数?

    elisp 支持虚数吗 我正在尝试通过运行 lisp 交互模式缓冲区来学习在线数学课程 Emacs elisp 有 高等数学 模块 库吗 Emacs 包括calc 一个支持复数的综合计算器 The manual is here C hig
  • Emacs .dir-locals.el - 设置键绑定

    我不确定这是否可行 但我想通过使用设置一些项目特定的键绑定 dir locals el 当然 dir locals el必须包含一个特殊的设置列表 所以我不能这样做 global set key 24 down move text down
  • emacs lisp 中的 let 和 flet

    我不知道你是否会称其为规范公式 但为了绑定本地函数 GNU 手册建议我使用 flet defun adder with flet x flet f x x 3 f x 然而 我偶然尝试了 在玩了一会儿Scheme之后 下面的表达式 其中我使
  • Emacs 插入居中注释块

    我想为 emacs 创建一个宏 它将插入一个带有一些居中文本的乳胶注释块 例如 Comment 1 Comment 2 Commenttext 3 这可
  • Emacs:与 TAB 的键绑定会破坏迷你缓冲区中的自动完成功能

    简而言之 我只是在 TAB 键上设置了键绑定 但是现在当我将 TAB 推入迷你缓冲区以自动完成命令时 它会失败并显示以下消息 The mark is not set now so there is no region 换句话说 当我的光标位
  • Elisp 交互功能,具有输入历史记录

    有很多交互式函数将字符串输入作为参数 defun zb run cmd X arg1 argN interactive Marg1 Marg2 some logic 如何制作每个这样的功能zb run cmd 1 zb run cmd N
  • 是否可以让 emacs 将 fn 键解释为修饰键?

    是否可以让 emacs 将 fn 键解释为修饰键 我可以绑定f6 f ex吗 超 我有这个 setq ns function modifier hyper set Mac s Fn key to type Hype 并尝试这样做 setq
  • 如何键入组织捕获的动态文件条目

    我试图弄清楚是否有某种方法可以创建动态文件名以在 emacs org mode 中捕获 z test entry file headline A date specific headline Notes prompt 是否有一些简单的方法将
  • Emacs - 无法使缓冲区提供保存工作

    当缓冲区未与文件关联时 我想让 Emacs 询问我是否要保存修改后的缓冲区 要打开新缓冲区 不访问文件 我的 emacs 文件中有以下函数 Creates a new empty buffer defun new empty buffer
  • 如何检查 emacs 是在框架中还是在终端中?

    基于这个问题 如何将emacsclient背景设置为Emacs背景 https stackoverflow com questions 9271930 how to set emacsclient background as emacs b
  • 在 emacs 中创建别名?

    我有一个 emacs 副本 可以从拇指驱动器在几台不同的 Windows 计算机上使用 我想知道是否可以在 emacs 中创建类似于 bash 别名或符号链接的东西 我可以在 find file 中使用的东西是我正在寻找的主要内容 例如 C
  • 如何使用 emacs/elisp 获取当前缓冲区信息的开始/结束?

    我有以下代码运行以范围输入的Figlet 如何修改此代码以检查 b 或 e 是否未指定 使 b 位于当前缓冲区的开头 e 位于当前缓冲区的结尾 defun figlet region optional b e interactive r s
  • emacs 启动后更改 X11 窗口标题

    当我启动 emacs 时 我可以使用 title 选项来控制保存 emacs 应用程序的 x 窗口的标题 emacs从elisp启动后可以更改标题吗 M x set frame name NewName RET 和来自 elisp set
  • 如何在 emacs 中自动回答是或否

    I binded function semantic symref to key C c C r like this global set key kbd C c C r semantic symref everytime I presse
  • Org-Mode 中的 FlySpell 可以像 auctex 一样识别 Latex 语法

    原始回复 我试图弄清楚在 auctex 模式下乳胶如何在打开 Flyspell 的情况下似乎不会突出显示任何乳胶功能 这是一个自定义词典文件还是如何实现的 这可以很容易地合并到组织模式文件中 这样它就不会突出显示将导出的插入乳胶代码吗 编辑
  • 对齐 emacs lisp 中的正则表达式

    我正在尝试使用以下 elisp 函数来对齐文本 defun align Align lines by interactive align regexp region beginning region end 我正在尝试对齐以下文本 offe
  • 用于将 PCRE 正则表达式转换为 emacs 正则表达式的 Elisp 机制

    我承认对喜好有很大的偏见PCRE http www pcre org regexps 比 emacs 好得多 如果没有其他原因 当我输入 时 我几乎总是想要一个分组运算符 当然 w 和类似的比其他等价物方便得多 但当然 期望改变 emacs

随机推荐