Question

Je voudrais écrire une instruction if qui déterminera si une chaîne est vide. Par exemple:

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

Dans cet exemple artificiel, j'utilise (is-empty) à la place de la méthode real elisp. Quelle est la bonne façon de faire cela?

Merci

Était-ce utile?

La solution

Puisqu'en elisp, une chaîne est un tableau int, vous pouvez utiliser

(= (length user-str) 0)

Vous pouvez également utiliser (string =) qui est généralement plus facile à lire

(string= "" user-str)

Equal fonctionne également, mais un peu plus lentement:

(equal "" user-str)

Autres conseils

Si vous utilisez beaucoup de chaînes dans votre code, je vous recommande vivement d'utiliser les s.el de Magnar Sveen. bibliothèque de manipulation de chaînes.

s-blank? vérifie si la chaîne est vide:

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

Je garde celui-ci dans mon 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)))))

alors je fais:

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

Je ne suis pas sûr de la façon canonique de tester cela, mais vous pouvez utiliser la fonction length et vérifier si la longueur de votre chaîne est supérieure à zéro:

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

Le livre de recettes Elisp d'EmacsWiki contient un exemple de fonction de rognage si vous souhaitez supprimer les espaces. avant de tester.

Depuis emacs 24.4, vous pouvez appeler deux fonctions différentes, en fonction de ce que vous entendez par "vide".

(string-empty-p " ")
nil

(string-blank-p " ")
0

Je ne parviens pas à trouver un lien vers les documents, mais emacsredux.com contient davantage d'informations.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top