Полиморфные обратные вызовы в Emacs / Elisp

Какой идиоматический способ реализовать полиморфные обратные вызовы в elisp?

В частности, предположим, что у меня есть второстепенный режим с функцией, которая выполняет определенную операцию, а затем вызывает другую функцию. Эта вторая функция должна иметь другую реализацию в зависимости от того, содержит ли текущий буфер файл C ++ или файл Java.

В качестве альтернативы, предположим, я хочу перегрузить переменные, а не функции. Например, я хочу вызвать какой-то внешний исполняемый файл, и один из переданных ему аргументов отличается в зависимости от того, есть ли в текущем буфере файл C ++ или файл Java. Я хочу иметь возможность создать командную строку в общей функции и заменить один аргумент в зависимости от содержимого буфера. Правильный ли подход make-variable-buffer-local ? В какой момент (и с помощью какого механизма) изначально предполагается установить эти локальные переменные?

8
задан Ray 24 November 2011 в 22:10
поделиться