2009-06-19 23 views
21

Me gustaría escribir una declaración if que haga algo en base a si una cadena está vacía. Por ejemplo:¿Cómo comprobar si una cadena está vacía en Emacs Lisp?

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

En este ejemplo artificial, estoy usando (es-vacío) en lugar del método elisp real. ¿Cuál es la forma correcta de hacer esto?

Gracias

Respuesta

33

Dado que en elisp, una cadena es una matriz int, puede utilizar

(= (length user-str) 0) 

También puede utilizar (cadena =), que suele ser más fácil de leer

(string= "" user-str) 

Igual funciona también, pero un poco más lento:

(equal "" user-str) 
1

no estoy seguro de cuál es la forma canónica de probar esto es, pero se puede usar la función de longitud y comprobar para ver si la longitud de la cadena es mayor que cero:

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

El EmacsWiki elisp libro de cocina tiene an example of a trim function si desea eliminar espacios en blanco antes de la prueba.

3

Si trabaja con cadenas en su código, le recomiendo usar la biblioteca de manipulación de cadenas s.el de Magnar Sveen.

s-blank? comprueba si la cadena está vacía:

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

que mantienen éste en mi utils.lisp:

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

entonces que hago:

(not (empty-string-p some-string)) 
Cuestiones relacionadas