Pregunta:
Estoy estudiando el siguiente fragmento de código tomado de prelude-c.el :
;; taken from prelude-c.el
(defun prelude-makefile-mode-defaults ()
(whitespace-toggle-options '(tabs))
(setq indent-tabs-mode t))
(setq prelude-makefile-mode-hook 'prelude-makefile-mode-defaults)
(add-hook 'makefile-mode-hook (lambda ()
(run-hooks 'prelude-makefile-mode-hook)))
El autor definió una función llamada prelude-makefile-mode-defaults
, luego le hizo un alias a prelude-makefile-mode-hook
y finalmente la ejecutó con lambda
y run-hooks
. Esto me parece tedioso. En mi humilde opinión, se puede simplificar a
(defun prelude-makefile-mode-defaults ()
(whitespace-toggle-options '(tabs))
(setq indent-tabs-mode t))
(add-hook 'makefile-mode-hook #'prelude-makefile-mode-defaults)
Ahora está mucho más claro, y parecen tener el mismo efecto, pero por supuesto, los autores de prelude.el deben ser mucho más sofisticados que yo, que soy solo un principiante. ¿Existe alguna ventaja oculta de escribir todo este código aparentemente redundante?
Respuesta:
Creo que la razón de esta indirección es que permite a los usuarios del paquete anular los valores predeterminados proporcionados por el paquete cambiando el valor de prelude-makefile-mode-hook
. Creo que el componente final del nombre prelude-makefile-mode-defaults
es una fuerte pista en esta dirección. Pero, por supuesto, solo el autor del paquete original puede dar una respuesta definitiva.