Я ненавижу способ, которым elisp (не уверен, что LISP вообще) обрабатывает многострочные строки документов.
(defun foo ()
"This is
a multi
liner
docstring"
(do-stuff))
Я действительно хочу, чтобы я мог сделать что-то вроде
(defun foo ()
(eval-when-compile
(concat
"This is\n"
"a multi\n"
"line\n"
"docstring"))
(do-stuff))
так что отступ был последовательным.
К сожалению, eval-when-compile не выполняет эту работу.
У кого-нибудь есть идеи?
eval-when-compile
цитирует его результат (чтобы превратить его из значения в выражение). Если бы он был немного умнее и цитировал свой результат только тогда, когда он не цитировался сам, он бы работал.
defun
. Недостаток этого подхода - и он серьезный - заключается в том, что он может сбить с толку любое программное обеспечение (кроме компилятора / интерпретатора elisp), которое анализирует ваш код в поискахdefun
s.