2009-06-19 27 views
21

Bir dizenin boş olup olmadığına dair bir şey yapacak bir if ifadesi yazmak istiyorum. Örneğin: Bu yapmacık örnekteEmacs Lisp'de bir dizenin boş olup olmadığını nasıl kontrol edebilirim?

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

, gerçek elisp yöntemi yerine (is-boş) kullanıyorum. Bunu yapmanın doğru yolu nedir?

Teşekkür

elisp içinde bu yana

cevap

33

, bir dize bir int dizisi, sen de (dize =) hangi

(string= "" user-str) 
okunması her zaman daha kolaydır kullanabilirsiniz

(= (length user-str) 0) 

kullanabileceği başka

Eşittir, ancak biraz daha yavaş çalışır:

1

Bunu test etmenin kurallı yoludur ne olduğundan emin değilim, ama uzunluk işlevini kullanın ve dize uzunluğu O'dan büyük olup olmadığını görmek için kontrol edebilir:

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

EmacsWiki elisp yemek kitabı an example of a trim function eğer var Testten önce boşlukları kaldırmak istiyorsunuz.

3

Kodunuzda çok fazla dizeyle çalışıyorsanız, Magnar Sveen'in s.el dize manipülasyon kütüphanesini kullanmanızı tavsiye ederim. dize boşsa

s-blank? çekleri: Yapmam sonra

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

:

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

benim utils.lisp içinde bu bir tutmak

(not (empty-string-p some-string)) 
İlgili konular