Entiendo que esto es trivial con un if, pero ¿hay una opción, like %S
o %s
que interpola nil como ninguna cadena?
Ejemplo:
(format "%?.el" nil) ; ".el"
(format "%?.el" "beginner") ; "beginner.el"
Sí, la interpolación de cadenas es el término correcto para usar. Es una variación sobre el tema de las comillas / macros, donde las cadenas se generan usando plantillas.
—
wvxvw
Es una buena pregunta Considere solicitar un
—
Drew
format
indicador para esto (usar M-x report-emacs-bug
para eso). El resto de nosotros nos hemos acostumbrado a usar concat
esto, a veces en combinación con format
(para otras conversiones). O bien, pasar un argumento a format
como (if something "foobar" "")
, correspondiente al format
indicador "%s"
.
FYI: acabo de presentar una solicitud de mejora (n. ° 19975), por lo que no es necesario. (Debería haber hecho eso hace años.)
—
Drew
Eso suena como una forma bastante dudosa de construir una expresión regular (tal vez considere usar la
—
phils
rx
macro en tal escenario. Como mínimo, asegúrese de que sea regexp-quote
apropiado), pero aparte de eso, si tiene una gran cantidad de cadenas en la LISTA, podría siempre hacer algo así (apply 'format "%s%s%s%s" (mapcar (lambda (x) (or x "")) LIST))
. Por supuesto, si su cadena de formato es literalmente similar "%s%s%s"
, entonces concat
tiene más sentido.
interpolation
etiqueta.