【发布时间】:2021-06-30 12:46:01
【问题描述】:
读取常量:hi时,
我得到了错误:
测试:错误类型参数:char-or-string-p, :hi
(defun test ()
:hi "greet"
(insert :hi)
)
(test)
这是什么意思?为什么“问候”不是输出?
【问题讨论】:
标签: elisp
读取常量:hi时,
我得到了错误:
测试:错误类型参数:char-or-string-p, :hi
(defun test ()
:hi "greet"
(insert :hi)
)
(test)
这是什么意思?为什么“问候”不是输出?
【问题讨论】:
标签: elisp
insert 在strings 或characters 上运行,但你给了它一个symbol (:hi)。将光标放在insert 上并点击Ch f RET(或在任何地方执行Ch f insert RET),您将在缓冲区@ 中获得函数insert 的描述987654330@.
我的 ESP 告诉我,您认为代码开头的 :hi "greet" 应该将变量 :hi 绑定到值 "greet",然后 (insert :hi) 应该在 :hi 的值上调用 insert是"greet"。
事实并非如此。
:hi "greet" 没有任何作用。:hi 是一个关键字,它始终是一个对自身求值且无法绑定的常量。let,尝试C-h f let RET。因此你的代码应该是
(def test()
"my function to insert a greeting"
(let ((hi "greet"))
(insert hi)))
我敦促您阅读"An Introduction to Programming in Emacs Lisp", 你不会后悔的。 最好的方法是在 Emacs 中:C-h i m intro TAB RET.
【讨论】:
defun的工作原理!请务必阅读 Emacs Lisp 的介绍或至少阅读 defun 的文档。