Di Emacs Lisp, bagaimana cara memeriksa apakah suatu variabel sudah ditentukan?


93

Di Emacs Lisp, bagaimana cara memeriksa apakah suatu variabel sudah ditentukan?

Jawaban:


139

Anda mungkin ingin terikatp: mengembalikan t jika variabel (simbol) tidak kosong; lebih tepatnya, jika pengikatan arusnya tidak batal. Ia mengembalikan nol jika tidak.

  (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

14
kadang-kadang mungkin juga berguna untuk menggunakan INTERN-SOFT untuk memeriksa apakah sebuah simbol ada.
Rainer Joswig

Saya juga terkadang menggunakan symbol-valuefungsi untuk mencetak nilai sebenarnya. simbol-nilai-doc . Misalnya: Menggunakan eval-expressionperintah dan kemudian mengetik ini: (symbol-value 'abracadabra)
Dhawan Gayash


4

Jika Anda ingin memeriksa nilai variabel dari dalam emacs (saya tidak tahu apakah ini berlaku, karena Anda menulis "di Emacs Lisp"?):

M-:dimulai Evaldi buffer mini. Tuliskan nama variabel dan tekan kembali. Buffer mini menunjukkan nilai variabel.

Jika variabel tidak ditentukan, Anda mendapatkan kesalahan debugger.


Sama M-: (boundp 'the-variable-name) REThalnya , akan memeriksa tanpa perlu memicu kesalahan.
Radon Rosborough

Saya cukup yakin pertanyaannya adalah tentang skrip elisp, bukan UI interaktif Emacs.
binki

0

Ingatlah bahwa variabel yang memiliki nilai nihil dianggap telah didefinisikan.

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

(progn (setq filename3 nil) (boundp 'filename5)) ;; returns nil
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.