我工作(快樂)工作通過介紹Emacs Lisp編程並已解決了第一個8.7 Searching Exercise。它指出,定義變量本地功能
編寫一個搜索字符串的交互功能。如果 搜索找到該字符串,則在該字符後面留下點,並顯示一條消息 ,其中顯示「找到!」。
我的解決辦法是
(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
,但如果未找到string
,則沒有將該點設置爲beginning-of-buffer
。 let
是否適合這種情況?
對於臨時範圍變量(它是「let」形式的範圍本地,而不是本地的*函數),你應該確實使用'let',除非正在使用詞法綁定,變量是否則標記爲動態)。 – phils
例如:'(let((found(save-excursion(goto-char(point-min))(search-forward string nil t nil))))(if found ...))' – phils
或者,您可以離開成功搜索後單獨指向,但在失敗後恢復原始位置。 – phils