Как проверить, нет ли строки в 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. Каков правильный способ сделать это?
Спасибо
Ответы
Ответ 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 пример функции обрезки, если вы хотите удалить пробелы перед тестированием.