source - emacs para mac
¿Cómo comprobar si una cadena está vacía en Emacs Lisp? (5)
Comenzando en emacs 24.4, hay dos funciones diferentes disponibles para que usted llame, dependiendo de lo que quiere decir con "vacío".
(string-empty-p " ") nil (string-blank-p " ") 0
Tengo problemas para encontrar documentos para vincular, pero emacsredux.com tiene más información.
Me gustaría escribir una sentencia if que haga algo en base a si una cadena está vacía. Por ejemplo:
(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 (está vacío) en lugar del método elisp real. ¿Cuál es la forma correcta de hacer esto?
Gracias
Guardo este en mis 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 lo hago:
(not (empty-string-p some-string))
No estoy seguro de cuál es la forma canónica de probar esto, pero podría usar la función de longitud y verificar si la longitud de su cadena es mayor que cero:
(length "abc")
=> 3
(length "")
=> 0
El libro de cocina EmacsWiki elisp tiene un ejemplo de una función de recorte si desea eliminar los espacios en blanco antes de la prueba.
Si trabaja con cadenas en gran medida en su código, le recomiendo usar la biblioteca de manipulación de cadenas de Magnar Sveen.
s-blank?
comprueba si la cadena está vacía:
(s-blank? "") ; => t
Ya que en elisp, una cadena es una matriz int, puedes usar
(= (length user-str) 0)
También puedes usar (string =) 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)