Подтвердить что ты не робот

Как проверить, нет ли строки в Emacs Lisp?

Я хотел бы написать оператор if, который будет делать что-то на основе того, является ли строка пустой. Например:

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

В этом надуманном примере я использую (is-empty) вместо реального метода elisp. Каков правильный способ сделать это?

Спасибо

4b9b3361

Ответ 1

Так как в elisp, String является массивом int, вы можете использовать

(= (length user-str) 0)

Вы также можете использовать (string =), который обычно легче читать

(string= "" user-str)

Равно работает, но немного медленнее:

(equal "" user-str)

Ответ 2

Если вы сильно работаете со строками в своем коде, я настоятельно рекомендую использовать Magnar Sveen s.el библиотеку манипуляций с строкой.

s-blank? проверяет, является ли строка пустой:

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

Ответ 3

Я сохраняю это в моем 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)))))

тогда я:

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

Ответ 4

Я не уверен, каков канонический способ тестирования, но вы можете использовать функцию длины и проверить, больше ли длина строки больше нуля:

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

В кулинарной книге EmacsWiki elisp пример функции обрезки, если вы хотите удалить пробелы перед тестированием.