【问题标题】:In Emacs Lisp, how do I check if a variable is defined?在 Emacs Lisp 中,如何检查变量是否已定义?
【发布时间】:2010-10-19 22:39:44
【问题描述】:

在 Emacs Lisp 中,如何检查变量是否已定义?

【问题讨论】:

    标签: emacs lisp elisp


    【解决方案1】:

    除了dfa's answer,您可能还想查看它是否使用fboundp 绑定为函数:

    (defun baz ()
      )
    => baz
    (boundp 'baz)
    => nil
    (fboundp 'baz)
    => t
    

    【讨论】:

      【解决方案2】:

      请记住,值为 nil 的变量被视为已定义。

      (progn (setq filename3 nil) (boundp 'filename3)) ;; returns t
      
      (progn (setq filename3 nil) (boundp 'filename5)) ;; returns nil
      

      【讨论】:

        【解决方案3】:

        如果你想在 emacs 中检查变量值(我不知道这是否适用,因为你写的是“在 Emacs Lisp 中”?):

        M-: 在迷你缓冲区中启动 Eval。写下变量的名称并按回车键。迷你缓冲区显示变量的值。

        如果未定义变量,则会出现调试器错误。

        【讨论】:

        • 等效地,M-: (boundp 'the-variable-name) RET 将在不需要触发错误的情况下进行检查。
        • 我很确定问题是关于 elisp 脚本,而不是 Emacs 的交互式 UI。
        【解决方案4】:

        你可能想要 boundp: 如果变量(一个符号)不是 void,则返回 t;更准确地说,如果它的当前绑定不是无效的。否则返回 nil。

          (boundp 'abracadabra)          ; Starts out void.
          => nil
        
          (let ((abracadabra 5))         ; Locally bind it.
            (boundp 'abracadabra))
          => t
        
          (boundp 'abracadabra)          ; Still globally void.
          => nil
        
          (setq abracadabra 5)           ; Make it globally nonvoid.
          => 5
        
          (boundp 'abracadabra)
          => t
        

        【讨论】:

        • 有时使用 INTERN-SOFT 检查符号是否存在也很有用。
        • 我有时也使用symbol-value 函数来打印实际值。 symbol-value-doc。例如:使用eval-expression 命令,然后输入:(symbol-value 'abracadabra)
        • let 块为我返回 nil。这适用于词法绑定吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-21
        • 2011-12-10
        相关资源
        最近更新 更多