2009-06-19 37 views
21

Tôi muốn viết một câu lệnh if sẽ làm điều gì đó dựa trên việc chuỗi có trống không. Ví dụ:Làm cách nào để kiểm tra xem chuỗi có trống trong Emacs Lisp không?

(defun prepend-dot-if-not-empty (user-str) 
    (interactive "s") 
    (if (is-empty user-str) 
    (setq user-str (concat "." user-str))) 
    (message user-str)) 

Trong ví dụ này, tôi đang sử dụng (trống) thay cho phương pháp elisp thực. Cách làm đúng là gì?

Cảm ơn

Trả lời

33

Vì trong elisp, một String là một mảng int, bạn có thể sử dụng

(= (length user-str) 0) 

Bạn cũng có thể sử dụng (string =) mà thường dễ dàng hơn để đọc

(string= "" user-str) 

Hoạt động bình đẳng, nhưng chậm hơn một chút:

(equal "" user-str) 
1

Tôi không chắc chắn những gì một cách kinh điển của thử nghiệm này, nhưng bạn có thể sử dụng chức năng chiều dài và kiểm tra xem nếu chiều dài của chuỗi của bạn là lớn hơn không:

(length "abc") 
=> 3 
(length "") 
=> 0 

Các EmacsWiki elisp sách dạy nấu ăn có an example of a trim function nếu bạn muốn xóa khoảng trắng trước khi thử nghiệm.

3

Nếu bạn làm việc với nhiều mã trong mã của mình, tôi khuyên bạn nên sử dụng thư viện thao tác chuỗi s.el của Magnar Sveen.

s-blank? kiểm tra xem chuỗi rỗng:

(s-blank? "") ; => t 
3

tôi tiếp tục thế này ở utils.lisp tôi:

(defun empty-string-p (string) 
    "Return true if the string is empty or nil. Expects string." 
    (or (null string) 
     (zerop (length (trim string))))) 

sau đó tôi làm:

(not (empty-string-p some-string)) 
Các vấn đề liên quan