3

信息页面没有提到这个声明。我发现它设置为 1、2 或 3 的用途,但还有哪些其他选项是可能的?它究竟是做什么的?

从表面上看,数字似乎意味着宏名称之后的行数,以进一步向右缩进,但在这种情况下,我如何告诉它将所有形式缩进为第一个?

例子:

(declare (indent 1))做这个:

(-iter 
    (with (a b c))
  (for i from 0 to 5)
  (collect i)
  (message "i: %s" i))

(declare (indent 2))做这个:

(-iter 
    (with (a b c))
    (for i from 0 to 5)
  (collect i)
  (message "i: %s" i))

(declare (indent 256))(或任何足够大的数字)这样做:

(-iter 
    (with (a b c))
    (for i from 0 to 5)
    (collect i)
    (message "i: %s" i))

我想做最后一个,除了提供一个任意大的数字。有没有办法告诉“全部”或某些事情?

4

2 回答 2

2

在手册中

C-hig (elisp) Indenting Macros RET

链接到 的索引条目declare,仅供参考。(Emacs 24.2.1)

于 2012-11-25T20:20:36.070 回答
2

由于接受的答案实际上并没有回答问题,而且手册相当迟钝,让我指出这个博客,它揭示了一个值0实际上在这里有效,并且是defun.

但是,缩进级别没有数字那么高。检查:

(indent nil)或没有(indent ...)声明:

(-iter
 (with (a b c))
 (for i from 0  to 5)
 (collect i)
 (message "i: %s" i))

使用(indent defun)(indent 0)

(-iter
  (with (a b c))
  (for i from 0 to 5)
  (collect i)
  (message "i: %s" i))

(indent 256)

(-iter
    (with (a b c))
    (for i from 0 to 5)
    (collect i)
    (message "i: %s" i))

(indent (lambda (x y) 4))您获得与 for 相同的结果(indent 256)。不过,硬编码缩进可能与使用 指定不同缩进样式的机制略有冲突lisp-indent-function

于 2019-03-22T07:18:59.737 回答