在emacs中评估绑定到键的函数时出现错误的类型错误

时间:2012-03-18 01:12:56

标签: emacs elisp

我编写了一个函数init-set-key-mappings,用于设置.emacs文件中的所有全局键。

(defun init-set-key-mappings ()
 "All the key mappings go here"
  (let ((mappings (list
                '("\C-ca"   'open-fileline))))
    (mapcar (lambda (mapping)
          (let ((key (car mapping))
                (func (cadr mapping)))
            (progn
              (message (format "map key %s to %s" key func))
              (global-set-key key func))))
        mappings)))

评价很好,但是当我按下C-c a时,Emacs抱怨“错误的类型参数命令,(引用open-fileline)”

我做错了什么?

编辑:我找到了答案。在打开文件之前删除引用似乎可以解决问题。为什么 它是问题的象征吗?这不是函数传递的方式 - 作为符号吗?

1 个答案:

答案 0 :(得分:5)

您双重引用了函数open-fileline。在表达式

(list '("\C-ca" 'open-fileline)))

第一个引号表示引用了以下列表中的所有。然后,您向open-fileline添加了第二个引用。这意味着列表实际上并不包含符号作为汽车的第二个元素,而是引用的符号。比较:

(symbolp (cadar (list '("string" 'open-fileline))))

(symbolp (cadar (list '("string" open-fileline))))