- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我如何检查一个变量是否在 let 构造之前定义?
(let (((if (boundp 'a)
'a
'dummy) t))
(message "I made this work"))
我想做的是检查 a
之前是否有界,如果已经有界,则在本地将其绑定(bind)到 t
。否则根本不用关心 a
。
最佳答案
代码失败:(wrong-type-argument symbolp (if (boundp (quote a)) (quote a) (quote dummy)))
,表明让
特殊形式* 不计算该参数(尽管该列表将计算为一个符号,但该列表本身 不是一个符号)。
这是一个简单但有缺陷的替代方法,它无论如何都会为 a
创建一个本地绑定(bind),但如果它最初是未绑定(bind)的,则在该本地范围内解除绑定(bind)。
(let ((a (if (boundp 'a) t nil)))
(or a (makunbound 'a))
;; do things
)
缺陷是,如果 a
最初是未绑定(bind)的,您可能希望在该本地范围内对 a
的赋值比本地范围长,但它不会这种方法。
最初我认为你需要完全放弃 let
来解决这个问题,而只是使用这样的东西:
(when (boundp 'a)
(setq a-backup a
a t))
;; do things
(when (boundp 'a-backup)
(setq a a-backup)
(makunbound 'a-backup))
然后我意识到,与许多事情一样,宏就是答案:
(defmacro let-if-bound (var value &rest body)
"Bind variable VAR to VALUE only if VAR is already bound."
(declare (indent 2))
`(if (boundp ',var)
(let ((,var ,value))
,@body)
(progn ,@body)))
(let-if-bound a t
;; do things
)
(*) A "special form" is a primitive function specially marked so that its arguments are not all evaluated. Most special forms define control structures or perform variable bindings--things which functions cannot do.
Each special form has its own rules for which arguments are evaluated and which are used without evaluation. Whether a particular argument is evaluated may depend on the results of evaluating other arguments.
关于emacs - Elisp:在 let 中绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9798343/
以下伪代码的elisp代码 if "the emacs version is less than 23.1.x" do something else something-else 写成 (if
我想使用雅虎从 Emacs Lisp 程序中获取股票价格。我有两个问题。 我如何制作http GET? 在 Elisp 中存储数据的最佳方法是什么,以便我可以对数据进行比较?换句话说,我应该使用一个哈
是的,我知道 emacs 分析器功能。我正在寻找类似于 time 的东西bash 中的关键字,例如: (time (myfunc)) 这将返回或打印 myfunc 所花费的时间称呼。有这样的事情吗?
您如何编写一个应该绑定(bind)到按键的 elisp 函数,该函数默认情况下不提示,但在 Ctrl-u 之前会提示用户输入参数。类似的东西(这是错误的语法,但我希望你明白)? (defun my-
在我自己编写的函数中,我想调用命令 compile 但让它以交互方式运行,就好像我已经完成了 Meta-x compile .仅仅调用 (compile) 并不像预期的参数那样工作。那么如何强制 em
我看到了 buffer-has-markers-at至少会告诉是否有指向某个位置的标记,但它不仅自 24.3 以来已被标记为过时,而且不提供实际获取标记对象的方法。 看着 the C source ,
当用户单击链接时,我有以下代码来调用 elisp 函数“myfun”: #+BEGIN_SRC elisp :results output raw (defun myfun(filepath li
emacs 是否支持不适合整数的大数字?如果是这样,我该如何使用它们? 最佳答案 Emacs Lispers frustrated by Emacs’s lack of bignum handling
什么是 elisp 对 Python 的等效项 range(start, end, [step]) ? 最佳答案 number-sequence类似于python的range但它的输出却大不相同。 例
相当于 {'a':1, 'b':2} 之类的 Python 字典是什么意思?在省略? 再说一次,elisp 有任何 map-reduce api 吗? 最佳答案 除了关联列表,(算法复杂度适合小表,大
我已经编写了类似于 progn 的函数(实际上是一个宏,但无论如何)。如何告诉 emacs 这个函数应该像 progn 一样缩进? 最佳答案 应该这样做 (put 'myfunc 'lisp-inde
是否有一个 emacs-lisp 命令可以用来用 gnuplot 绘制一组数字,就像我可以在 Excel 中根据数字数组创建简单的折线图一样? 例如,我想要一个名为 plot-with-gnuplot
我有这段工作代码 (setq block_id nil) (setq myHash (make-hash-table :test 'equal)) (puthash "5" "a" myHash) (
如何在 elisp 中的一个 block 中一个接一个地运行多个命令。像这样但不准确, ((message "first message") (message "second message"))
在 elisp 中, (cons 1 2) `returns` (1 . 2) (list 1 2) `returns` (1 2) 两个输出之间有什么区别? 最佳答案 (cons 1 2)创建一个像
我想编写一个需要文件名作为参数的脚本。我想利用“ido-find-file”来获取文件,因为它是这样的这是选择文件名的好方法,但我不想打开该文件因此,只需将其用作我的函数的参数即可。 最佳答案 ido
我想编写一个需要文件名作为参数的脚本。我想利用“ido-find-file”来获取文件,因为它是这样的选择文件名的好方法,但我不想打开文件因此,只需将它用作我的函数的参数即可。 最佳答案 ido-fi
我使用以下代码运行“ls -l ./”并在暂存缓冲区中获取结果。 (start-process "my-process" "*scratch*" "ls" "-l" "./") 如何在剪贴板或其他东西
我有一个文本文件,其中包含相关内容/段落。假设我从文本中剪切/杀死段落 A。我想编写一个在这种情况下调用的函数,因此相关的段落——比如说 B——也被删除了。一个很好的例子是其中包含引用/引用的文档。
Emacs 版本。 25.1.1 所有 emacs 源文件都在文件夹中:...\emacs\share\emacs\25.1\lisp\ 假设我在 emacs 文件中打开 网址.el .在这个文件中有
我是一名优秀的程序员,十分优秀!