我无法理解我需要采用的方法来折叠函数列表并使用特定参数调用它们.
这是我假设的工作方式.我已经尝试了各种变化,使用eval等任何指针?
(mapcar (lambda (fn) (fn 'utf-8))
(list #'set-terminal-coding-system
#'set-keyboard-coding-system
#'prefer-coding-system))
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我得到"符号的函数定义是无效的:fn".
编辑| 好的,这样可行,但是apply当上面的例子使用#'function-namesynax 传递函数时,需要使用它似乎很奇怪.
(mapcar (lambda (fn) (apply fn '(utf-8)))
'(set-terminal-coding-system
set-keyboard-coding-system
prefer-coding-system))
Run Code Online (Sandbox Code Playgroud)
在Emacs lisp中,符号具有单独的值和功能槽1.
函数参数作为参数符号的值传入,但是当你评估时(fn 'utf-8)你使用fn符号的函数槽,它不包含你想要的东西(或者在这个例子中,任何东西都是;因此错误"符号的函数定义是void:fn").
要调用变量中保存的函数,您必须funcall或apply(或类似).
也可以看看:
(elisp) Calling Functions RET(elisp) Function Names RET1即它是所谓的"lisp-2",而不是"lisp-1",两者都有一个名称空间.