【问题标题】:Elisp: reading a constantElisp:读取一个常数
【发布时间】:2021-06-30 12:46:01
【问题描述】:

读取常量:hi时, 我得到了错误:

测试:错误类型参数:char-or-string-p, :hi

(defun test ()
   :hi "greet"
   (insert :hi)
 )

(test)

这是什么意思?为什么“问候”不是输出?

【问题讨论】:

    标签: elisp


    【解决方案1】:

    您的错误信息

    insertstrings 或characters 上运行,但你给了它一个symbol (:hi)。将光标放在insert 上并点击Ch f RET(或在任何地方执行Ch f insert RET),您将在缓冲区@ 中获得函数insert 的描述987654330@.

    你的问题

    我的 ESP 告诉我,您认为代码开头的 :hi "greet" 应该将变量 :hi 绑定到值 "greet",然后 (insert :hi) 应该在 :hi 的值上调用 insert"greet"

    事实并非如此。

    1. :hi "greet" 没有任何作用。
    2. :hi 是一个关键字,它始终是一个对自身求值且无法绑定的常量。
    3. 要绑定局部变量,请使用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 test :someConstant "variable" [...] ?
    • 不是defun的工作原理!请务必阅读 Emacs Lisp 的介绍或至少阅读 defun 的文档。
    • ups,对不起,我把它和函数调用混在一起了
    猜你喜欢
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    相关资源
    最近更新 更多