Elisp:读取常量
Elisp: reading a constant
读取常量时:hi
,
我收到错误:
test: Wrong type argument: char-or-string-p, :hi
(defun test ()
:hi "greet"
(insert :hi)
)
(test)
这是什么意思?为什么“greet”不是输出?
您的错误信息
insert
在 string
s 或 character
s 上运行,但你给它一个 symbol
(:hi
)。将光标放在 insert
上并点击 C-h f RET(或在任何地方执行 C-h f insert RET),您将获得以下描述缓冲区 *Help*
.
中的函数 insert
你的问题
我的 ESP 告诉我你认为代码开头的 :hi "greet"
应该将变量 :hi
绑定到值 "greet"
然后 (insert :hi)
应该调用 insert
在 :hi
的值上应该是 "greet"
.
事实并非如此。
:hi "greet"
没有任何效果。
:hi
是一个关键字,它总是一个计算为自身的常量,不能被绑定。
- 要绑定局部变量,请使用
let
,尝试 C-h f let RET.
因此你的代码应该是
(def test()
"my function to insert a greeting"
(let ((hi "greet"))
(insert hi)))
补救措施
我强烈建议您阅读 “Emacs 编程简介”
Lisp,
你不会后悔的。
最好的方法是在 Emacs 中:C-h i m intro TAB RET.
读取常量时:hi
,
我收到错误:
test: Wrong type argument: char-or-string-p, :hi
(defun test ()
:hi "greet"
(insert :hi)
)
(test)
这是什么意思?为什么“greet”不是输出?
您的错误信息
insert
在 string
s 或 character
s 上运行,但你给它一个 symbol
(:hi
)。将光标放在 insert
上并点击 C-h f RET(或在任何地方执行 C-h f insert RET),您将获得以下描述缓冲区 *Help*
.
insert
你的问题
我的 ESP 告诉我你认为代码开头的 :hi "greet"
应该将变量 :hi
绑定到值 "greet"
然后 (insert :hi)
应该调用 insert
在 :hi
的值上应该是 "greet"
.
事实并非如此。
:hi "greet"
没有任何效果。:hi
是一个关键字,它总是一个计算为自身的常量,不能被绑定。- 要绑定局部变量,请使用
let
,尝试 C-h f let RET.
因此你的代码应该是
(def test()
"my function to insert a greeting"
(let ((hi "greet"))
(insert hi)))
补救措施
我强烈建议您阅读 “Emacs 编程简介” Lisp, 你不会后悔的。 最好的方法是在 Emacs 中:C-h i m intro TAB RET.