定义变量local to function

时间:2017-04-04 02:35:34

标签: emacs let cursor-position

我正在(快乐地)完成 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,则不能将该点设置为stringlet是否适合这种情况?

1 个答案:

答案 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'评论修改了代码。