J'ai ceci dans mon .emacs:
(defalias 'λ 'lambda)
qui fonctionne bien pour des choses simples comme (funcall (λ (x) x) 1)
.
Mais quand je fais quelque chose comme (org-add-link-type "foo" (λ (s) (message s)))
ou (add-to-list 'auto-mode-alist '("foo" . (λ () (message "bar"))))
, ça ne marche pas et je reçois
org-open-at-point: fonction non valide: (λ (s) (message s))
et
Erreur de spécification du mode fichier: (fonction invalide (λ nil (message "bar"))))
respectivement.
Quelqu'un sait-il ce qui ne va pas ici?
defalias
, mais vous voudrez peut-être vérifierprettify-symbols-mode
, ce qui, entre autres, vous permettra d'afficherlambda
commeλ
sans réellement changer le texte sous-jacent.lambda
(àλ
):pretty-lambdada.el
.Réponses:
Avec l'aide de lunaryorn sur reddit , je suppose que j'ai pu comprendre pourquoi vous observez le comportement "bizarre".
Le problème est que vous citez l'expression
Ce qui équivaut à la forme
Maintenant, quand emacs ouvre un fichier avec l'extension "foo", il fait quelque chose comme ceci
Remarquez la citation supplémentaire, avant
(λ
, ce n'est évidemment pas une fonction valide et vous obtenez l'erreurInvalid function: ...
Mais alors pourquoi ça("foo" . (lambda () (message "bar")))
marche, cela s'explique par l'observation de lunaryorn'(lambda () (message "bar"))
Est donc une fonction valide, cela peut être vérifié par le code suivantLa solution serait donc de ne pas citer simplement l'expression à la place
la source
Il semble que le problème ne soit pas avec le
defalias
, mais plutôt où et comment vous appelezλ
.funcall
prend, comme arguments, une fonction et les arguments de cette fonction, donc votrefuncall
exemple fonctionne très bien.Les deux
org-add-link-type
et leauto-mode-alist
, cependant, attendent des symboles qui contiennent les fonctions pertinentes. Par conséquent, à partir de vos exemples, les éléments suivants devraient fonctionner:Si vous cherchez surtout à
λ
apparaître dans votre tampon, pensez à essayerprettify-symbols-mode
, qui s'afficheralambda
commeλ
sans changer le texte du tampon.la source
lambda
directement.lambda
macro renvoie unelambda
forme spéciale auto-citée que l'alias ne reprend pas, mais il pourrait y avoir plus de magie noire ici. Invoquez @Malabarba.