Ich hasse die Art und Weise, wie elisp (nicht sicher, ob LISP im Allgemeinen) mit mehrzeiligen Dokumentzeichenfolgen umgeht.
(defun foo ()
"This is
a multi
liner
docstring"
(do-stuff))
Ich wünschte wirklich, ich könnte so etwas tun
(defun foo ()
(eval-when-compile
(concat
"This is\n"
"a multi\n"
"line\n"
"docstring"))
(do-stuff))
so dass die Einrückung konsistent war.
Leider macht eval-when-compile den Job nicht.
Hat jemand irgendwelche Ideen?
elisp
doc-strings
Krazy Glew
quelle
quelle
defun
. Der Nachteil dieses Ansatzes - und es ist ein großer - ist, dass jede Software (außer dem Elisp-Compiler / Interpreter) verwirrt wird, die Ihren Code analysiert und nachdefun
s sucht .eval-when-compile
das Ergebnis zitiert (um ihn von einem Wert in einen Ausdruck umzuwandeln ). Wenn es ein bisschen schlauer wäre und sein Ergebnis nur dann zitieren würde, wenn es nicht selbst zitiert, würde es funktionieren.Antworten:
Natürlich ist ein
my-defun
Makro der einfache Ausweg. Aber eine einfachere Lösung wäreDamit sollte Ihr Trick funktionieren, zumindest in allen Fällen, in denen die Funktion vor ihrer tatsächlichen Definition makroerweitert ist, einschließlich der wichtigsten Anwendungsfälle (z. B. wenn sie aus einer Datei geladen wird, wenn sie bytekompiliert ist oder wenn sie definiert ist via
M-C-x
).Dies behebt jedoch nicht den gesamten vorhandenen Code. Vielleicht ist eine bessere Antwort so etwas wie:
Dies sollte nur die Dokumentzeichenfolgen um 2 Leerzeichen verschieben, jedoch nur auf der Anzeigeseite, ohne den tatsächlichen Inhalt des Puffers zu beeinflussen.
quelle
Sie könnten ein Makro wie das folgende verwenden:
Dann können Sie Ihre Funktionen folgendermaßen definieren:
Trotzdem würde ich dringend empfehlen, nicht gegen die Standards zu verstoßen, um einen so geringen Nutzen zu erzielen. Die „unregelmäßige Einrückung“, die Sie stört, besteht nur aus zwei Spalten, ganz zu schweigen davon, dass sie die erste wichtige Dokumentationszeile hervorhebt.
quelle
eval-when-compile
war ein Makro.Ich habe Pakete gesehen, die Docstrings wie folgt definieren:
Platzieren Sie das erste Zitat in der ersten Zeile und beginnen Sie den Text in der nächsten, damit alle in einer Reihe stehen. Es ist definitiv nicht der Standard, aber Sie wären nicht der einzige, der es tut.
quelle