我想编写一个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))
Run Code Online (Sandbox Code Playgroud)
在这个人为的例子中,我使用(is-empty)代替真正的elisp方法.这样做的正确方法是什么?
谢谢
mih*_*ihi 40
因为在elisp中,String是一个int数组,所以你可以使用
(= (length user-str) 0)
Run Code Online (Sandbox Code Playgroud)
您也可以使用(string =),这通常更容易阅读
(string= "" user-str)
Run Code Online (Sandbox Code Playgroud)
同样有效,但有点慢:
(equal "" user-str)
Run Code Online (Sandbox Code Playgroud)
小智 7
从 emacs 24.4 开始,有两种不同的函数可供您调用,具体取决于“空”的含义。
(string-empty-p " ")
nil
(string-blank-p " ")
0
Run Code Online (Sandbox Code Playgroud)
我找不到要链接的文档,但emacsredux.com有更多信息。
如果您收到错误Symbol's function definition is void.,请包含(require 'subr-x)在初始化文件中(它是用于修剪和字符串操作的包)。
如果您在代码中大量使用字符串,我强烈建议您使用Magnar Sveen的s.el字符串操作库。
s-blank? 检查字符串是否为空:
(s-blank? "") ; => t
Run Code Online (Sandbox Code Playgroud)
我把这个放在我的utils.lisp:
(defun empty-string-p (string)
"Return true if the STRING is empty or nil. Expects string type."
(or (null string)
(zerop (length (string-trim string)))))
Run Code Online (Sandbox Code Playgroud)
然后我做:
(not (empty-string-p some-string))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11515 次 |
| 最近记录: |