2

我想检查 a 是否(forward-sexp 1)成功,或以错误结束。问题是它返回 nil,即使它已经成功。如何进行此项检查?

4

3 回答 3

8

试试scan-sexps吧。它是背后的主力,forward-sexp并返回一个有意义的值。

当然,如果括号不平衡,那么你会得到一个错误 - 所以你需要ignore-errorsor condition-case

于 2013-02-26T00:45:24.263 回答
5

forward-sexp如果它不能向前移动点,则发出错误信号。condition-case如果你愿意,你可以抓住这个。这是一个测试它的示例命令:

(defun test-forward-sexp ()
  "simple command testing (forward-sexp 1)"
  (interactive)
  (condition-case nil
      (progn
        (forward-sexp 1)
        (message "succeeded"))
    (error (message "failed"))))

您可以在信息页面Writing Code to Handle Errors上阅读有关处理错误的更多信息。

于 2013-02-26T02:53:44.273 回答
3

forward-sexp如果出现错误,则不返回 nil (实际上在这种情况下,它不返回任何内容;而是发出错误信号)。

于 2013-02-26T02:23:20.010 回答