Ao postar perguntas e respostas aqui, as pessoas às vezes usam os termos "função" e "comando" de forma intercambiável. Em outros casos, as pessoas usam apenas um dos dois termos para discutir partes específicas do código. Como suas postagens geralmente se concentram em outros tópicos, eles não explicam por que estão usando um termo, mas não o outro. Tão:
P: No Emacs Lisp, qual é a diferença entre uma função e um comando?
C-h i
, escolha o manual Elisp ,i command
- coloca você no nóWhat is a function?
, o que torna tudo isso claro. Ajude os usuários a aprender a perguntar ao Emacs. (Apenas uma opinião).Respostas:
Todo comando é uma função, mas nem toda função também é um comando. 1 1
Um comando inclui uma chamada para
interactive
; é por isso que os comandos são comumente referidos como "funções interativas". Os comandos podem ser chamados via M-xname-of-command
RETe também podem ser associados a uma sequência de teclas. As funções regulares não incluem uma chamada parainteractive
, não podem ser chamadas usando M-xe você não pode vinculá-las a uma sequência de teclas. Para executar uma função que não é interativa, pressione M-:(eval-expression
), digite o nome da função seguido por valores para qualquer argumento que ele precise entre parênteses e pressione RET:M-:
(name-of-function arg1 arg2 arg3)
RETSe a função não deve operar no buffer atual, você também pode inserir
no
*scratch*
buffer e pressione C-x C-e(eval-last-sexp
) com o ponto posicionado após o parêntese de fechamento.Para disponibilizar uma função
bar
como comando, você pode agrupá-la em uma função interativa personalizada (foo
) da seguinte maneira:Obviamente, se houver
bar
um ou mais argumentos, você precisará fornecê-los para que ofoo
trabalho funcione corretamente.Se você vir pessoas usando os termos "função" e "comando" de forma intercambiável, isso pode indicar (dependendo do contexto) que eles não estão cientes das diferenças entre os conceitos subjacentes.
1 Observe que estou falando de
defun
s aqui. Como o @Stefan aponta nos comentários, as macros do teclado são um caso especial: elas podem ser consideradas comandos , mas não são funções.fonte
interactive
"chamadas" são geralmente chamadas de declarações (a função em si não faz nada).M-: (commandp [?a]) RET
, (correclty) dirá que[?a]
é um comando, mas não é uma função.