여기에 질문과 답변을 게시 할 때 사람들은 때때로 "기능"과 "명령"이라는 용어를 서로 바꿔서 사용합니다. 다른 경우, 사람들은 두 가지 용어 중 하나만 사용하여 특정 코드 조각에 대해 논의합니다. 게시물은 일반적으로 다른 주제에 초점을 맞추기 때문에 한 용어를 사용하지만 다른 용어는 사용하지 않는 이유를 설명하지 않습니다. 그래서:
Q : Emacs Lisp에서 함수와 명령의 차이점은 무엇입니까?
여기에 질문과 답변을 게시 할 때 사람들은 때때로 "기능"과 "명령"이라는 용어를 서로 바꿔서 사용합니다. 다른 경우, 사람들은 두 가지 용어 중 하나만 사용하여 특정 코드 조각에 대해 논의합니다. 게시물은 일반적으로 다른 주제에 초점을 맞추기 때문에 한 용어를 사용하지만 다른 용어는 사용하지 않는 이유를 설명하지 않습니다. 그래서:
Q : Emacs Lisp에서 함수와 명령의 차이점은 무엇입니까?
답변:
모든 명령은 함수이지만 모든 기능도 명령은 아닙니다. 1
명령에는 다음에 대한 호출이 포함됩니다 interactive
. 이런 이유로 명령을 "대화식 기능"이라고합니다. 를 통해 명령을 호출 할 수 있으며 M-x name-of-command
RET키 시퀀스에 바인딩 할 수도 있습니다. 정기적 인 기능을 할 수 없습니다 호출을 포함 interactive
, 수 없습니다 사용하여 호출 할 수 M-x, 당신은 키 순서로 할 수 없습니다 결합 그들. 대화식이 아닌 함수를 실행하려면 M-:( eval-expression
)를 누르고 함수 이름 다음에 괄호로 묶어야하는 인수의 값을 입력 한 후 다음을 누르십시오 RET.
M-: (name-of-function arg1 arg2 arg3)
RET
함수가 현재 버퍼에서 작동하지 않으면 다음을 입력 할 수도 있습니다.
(name-of-function arg1 arg2 arg3)
*scratch*
버퍼 에서 괄호 뒤에 점을두고 C-x C-e( eval-last-sexp
)를 누릅니다 .
기능을 bar
명령으로 사용 가능 하게하려면 foo
다음과 같이 사용자 정의 대화식 기능 ( )으로 랩핑 할 수 있습니다 .
(defun foo ()
(interactive)
(bar))
물론, bar
하나 이상의 인수가 필요한 경우 foo
올바르게 작동 하려면 인수를 제공해야 합니다.
"함수"와 "명령"이라는 용어를 서로 바꾸어 사용하는 사람들을 본다면, 이는 상황에 따라 기본 개념의 차이점을 인식하지 못하는 것을 나타낼 수 있습니다 .
1 나는 defun
여기서 이야기하고 있습니다. 주석에서 @Stefan이 지적한 것처럼 키보드 매크로 는 특별한 경우입니다. 명령으로 간주 될 수 는 있지만 기능은 아닙니다.
interactive
"호출"은 일반적으로 선언이라고합니다 (함수 자체는 실제로 아무것도하지 않습니다).
M-: (commandp [?a]) RET
를 들어 (정확한) [?a]
명령이라고 말하지만 기능은 아닙니다.
C-h i
, 선택 Elisp 설명서를 ,i command
- 바로 노드 풋을What is a function?
분명이 결정의 전부를 만든다. 사용자가 Emacs를 묻는 법을 배우도록 도와줍니다. (단 한 의견)