Ja, String-Interpolation ist der richtige Begriff. Es ist eine Variation zum Thema Anführungszeichen / Makros, bei der Zeichenfolgen mithilfe von Vorlagen generiert werden.
wvxvw
1
Das ist eine gute Frage. Ziehen Sie in Betracht, einen formatIndikator dafür anzufordern (verwenden Sie ihn M-x report-emacs-bugdafür). Der Rest von uns hat sich daran gewöhnt concat, manchmal in Kombination mit format(für andere Konvertierungen). Oder ein Argument an ein formatsolches übergeben (if something "foobar" ""), das dem formatIndikator entspricht "%s".
Drew
2
Zu Ihrer Information - Ich habe gerade einen solchen Verbesserungsantrag gestellt (# 19975), das brauchen Sie also nicht. (Hätte das schon vor Jahren tun sollen.)
Drew
1
Das klingt nach einer ziemlich zweifelhaften Methode, um einen regulären Ausdruck zu erstellen (vielleicht sollten Sie das rxMakro in einem solchen Szenario verwenden. Stellen Sie zumindest sicher, dass Sie regexp-quoteentsprechend sind), aber abgesehen davon, wenn Sie eine große Anzahl von Vielleicht-Zeichenfolgen in LIST haben, könnten Sie dies tun mach immer so etwas (apply 'format "%s%s%s%s" (mapcar (lambda (x) (or x "")) LIST)). Wenn Ihre Formatzeichenfolge buchstäblich so ist "%s%s%s", ist dies concatnatürlich sinnvoller.
Phils
Antworten:
8
Abhängig von Ihrer Anwendung kann concatFolgendes hilfreich sein:
(concat "live long " nil "and prosper")
;; => "live long and prosper"
Dies funktioniert, weil concat auf Sequenzen wirkt und nil eine leere Liste ist.
Das spezielle Formular orist hier nützlich. Dieses Makro gibt den Wert des ersten Arguments zurück, es sei denn, es ist null. In diesem Fall gibt es das zweite zurück. Angenommen, die Variable, die Sie überprüfen möchten, ist foodas Folgende, was Sie wollen:
(format "%s.el" (or foo ""))
In mancher Hinsicht ist es besser als ein magisches Tag, da es klar macht, welcher Wert zurückgegeben werden soll, wenn das Argument Null ist.
Meinetwegen. Der wichtige Punkt hierbei ist jedoch, dass es sich nicht um eine Funktion handelt (dh um einen Kurzschluss). Mein Beispiel ist so gut, dass es keinen Unterschied macht, aber wenn das zweite Argument Nebenwirkungen hat, ist es anders.
interpolation
Tag anfordern .format
Indikator dafür anzufordern (verwenden Sie ihnM-x report-emacs-bug
dafür). Der Rest von uns hat sich daran gewöhntconcat
, manchmal in Kombination mitformat
(für andere Konvertierungen). Oder ein Argument an einformat
solches übergeben(if something "foobar" "")
, das demformat
Indikator entspricht"%s"
.rx
Makro in einem solchen Szenario verwenden. Stellen Sie zumindest sicher, dass Sieregexp-quote
entsprechend sind), aber abgesehen davon, wenn Sie eine große Anzahl von Vielleicht-Zeichenfolgen in LIST haben, könnten Sie dies tun mach immer so etwas(apply 'format "%s%s%s%s" (mapcar (lambda (x) (or x "")) LIST))
. Wenn Ihre Formatzeichenfolge buchstäblich so ist"%s%s%s"
, ist diesconcat
natürlich sinnvoller.Antworten:
Abhängig von Ihrer Anwendung kann
concat
Folgendes hilfreich sein:Dies funktioniert, weil concat auf Sequenzen wirkt und nil eine leere Liste ist.
quelle
Das spezielle Formular
or
ist hier nützlich. Dieses Makro gibt den Wert des ersten Arguments zurück, es sei denn, es ist null. In diesem Fall gibt es das zweite zurück. Angenommen, die Variable, die Sie überprüfen möchten, istfoo
das Folgende, was Sie wollen:In mancher Hinsicht ist es besser als ein magisches Tag, da es klar macht, welcher Wert zurückgegeben werden soll, wenn das Argument Null ist.
quelle