我正在(快乐地)完成 Emacs Lisp编程简介并解决了第一个8.7 Searching Exercise。它说,
编写一个搜索字符串的交互式函数。如果 search查找字符串,在其后留点并显示消息 那就是“发现!”。
我的解决方案是
(defun test-search (string)
"Searches for STRING in document.
Displays message 'Found!' or 'Not found...'"
(interactive "sEnter search word: ")
(save-excursion
(beginning-of-buffer)
(setq found (search-forward string nil t nil)))
(if found
(progn
(goto-char found)
(message "Found!"))
(message "Not found...")))
如何让found
成为函数的本地?我知道let
语句定义了一个局部变量。但是,如果找到string
,我只想移动点。我不清楚如何在本地定义found
,但如果找不到beginning-of-buffer
,则不能将该点设置为string
。 let
是否适合这种情况?
答案 0 :(得分:1)
正如一些评论中所述,let
是你想在这里使用的,虽然它不定义函数的本地变量,但是自己的范围。
您的代码变为:
(defun test-search (string)
"Searches for STRING in document.
Displays message 'Found!' or 'Not found...'"
(interactive "sEnter search word: ")
(let ((found (save-excursion
(goto-char (point-min))
(search-forward string nil t nil))))
(if found
(progn
(goto-char found)
(message "Found!"))
(message "Not found..."))))
编辑:感谢phils'评论修改了代码。