- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个已知变量和相应函数的列表,其中参数列表为零,在主体内部它使用已知的非参数(或全局)变量。
例如
(defun funA ()
(message "%s" varA))
(defun funB ()
(message "%s" varB))
...
(setq alist
'((varA . funA)
(varB . funB)
...
))
列表中的相似元素可以动态添加/删除。
我想在另一个函数中运行所有这些函数,其中已知变量的值以 LET 形式动态分配。
(defun call-each-fun-of-alist ()
(dolist (e alist)
(let (( (car e) (read-from-minibuffer "value: ") ))
(funcall (cdr e)))))
(是的,它会抛出错误,但我想要类似的东西,可能没有 EVAL)
对于 alist 的已知元素(就像我首先可以做的那样
(let ((varA (read-from-minibuffer "value: ")))
(funcall (cdr (assoc 'varA alist))))
但是 alist 是动态更新的,我要运行 alist 中的所有功能相应变量的值将动态出现。
请告诉我如何定义
call-each-fun-of-alist
(不一定,但没有在 call-each-fun-of-alist 中调用 EVAL,如果没有 EVAL 不可能的话,我也想知道。)
最佳答案
您可以使用 letf
(最近的 Emacs 中的 cl-letf
)来完成此操作。它绑定(bind)像 let
这样的值,但允许“位置”或“广义变量”以及简单的变量名称。
(defun call-each-fun-of-alist ()
(cl-dolist (e alist)
(cl-destructuring-bind (variable . function) e
(cl-letf (((symbol-value variable)
(read-from-minibuffer
(format "value for %s: "
variable))))
(funcall function)))))
请注意,除非先前使用 defvar
将 alist
中命名的变量声明为动态变量,否则这将失败并出现错误。在 Elisp 手册中查找“广义变量”以获取更多信息。
另一种解决方案是使用 cl-progv
,它采用变量名称和值的并行列表来动态绑定(bind):
(defun call-each-fun-of-alist ()
(cl-dolist (e alist)
(cl-destructuring-bind (variable . function) e
(cl-progv
(list variable)
(list (read-from-minibuffer
(format "value for %s: "
variable)))
(funcall function)))))
关于lisp - 在 Elisp 中,如何动态地为一个也动态选择的变量赋值(以 let 形式)。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15990583/
以下伪代码的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 .在这个文件中有
我是一名优秀的程序员,十分优秀!