ใน Emacs Lisp ฉันจะตรวจสอบตัวแปรได้อย่างไร


คำตอบ:


139

คุณอาจต้องการ boundp: คืนค่า t ถ้าตัวแปร (สัญลักษณ์) ไม่เป็นโมฆะ อย่างแม่นยำยิ่งขึ้นหากการผูกปัจจุบันไม่เป็นโมฆะ มันจะคืนค่าศูนย์เป็นอย่างอื่น

  (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
บางครั้งอาจเป็นประโยชน์ในการใช้ INTERN-SOFT เพื่อตรวจสอบว่ามีสัญลักษณ์อยู่หรือไม่
Rainer Joswig

บางครั้งฉันยังใช้symbol-valueฟังก์ชันเพื่อพิมพ์ค่าจริง สัญลักษณ์ - ค่า -doc . เช่น: ใช้eval-expressionคำสั่งแล้วพิมพ์ออกมา: (symbol-value 'abracadabra)
Dhawan Gayash


4

หากคุณต้องการตรวจสอบค่าตัวแปรจากภายใน emacs (ฉันไม่รู้ว่าใช้ได้หรือไม่เนื่องจากคุณเขียนว่า "in Emacs Lisp"):

M-:เริ่มต้นEvalในมินิบัฟเฟอร์ เขียนชื่อตัวแปรแล้วกด return มินิบัฟเฟอร์แสดงค่าของตัวแปร

หากไม่ได้กำหนดตัวแปรคุณจะได้รับข้อผิดพลาดในการดีบักเกอร์


ในทางเดียวกันM-: (boundp 'the-variable-name) RETจะตรวจสอบโดยไม่จำเป็นต้องเรียกใช้ข้อผิดพลาด
Radon Rosborough

ฉันค่อนข้างมั่นใจว่าคำถามเกี่ยวกับสคริปต์ elisp ไม่ใช่ UI แบบโต้ตอบของ Emacs
binki

0

โปรดจำไว้ว่าตัวแปรที่มีค่าเป็นศูนย์ถือได้ว่าถูกกำหนดไว้

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

(progn (setq filename3 nil) (boundp 'filename5)) ;; returns nil
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.