関数とコマンドの違いは何ですか?


35

ここに質問と回答を投稿するとき、人々は「機能」と「コマンド」という用語を同じ意味で使用することがあります。その他の場合、人々は2つの用語のうちの1つだけを使用して、特定のコードを議論します。彼らの投稿は通常他のトピックに焦点を合わせているため、ある用語を使用しているのに他の用語を使用していない理由を説明していません。そう:

Q: Emacs Lispでは、関数とコマンドの違いは何ですか?


13
もちろん、あなたにはそうするすべての権利があり、これによって何人かの人々が助けられると確信しています。しかし、FWIWでは、Emacs自体について質問するように誰かに教える方が良いかもしれないあらゆる小さなことについて、ここではQ&Aに賛成していません。これはそのようなものです、IMO-これを見つけるのは難しくなく、Emacsは良い答えを与えます。C-h iElispマニュアルを選択しますi command-node What is a function?に移動すると、このすべてが明確になります。ユーザーがEmacsに尋ねることを学ぶのを助けます。(1つだけの意見。)
ドリュー14年

1
とはいえ、あなたは質問によく答えて答えました。
ドリュー14年

5
@Drew最初にEmacsに質問するように人々に教えることに100%同意します。この具体的なQ&Aの主な目的は、それが簡単に用語の正しい使用を促進するために、必要に応じてコマンドと関数の違いをユーザーに認識させるようにすることです。時々 、人々は、これは彼らが求めてされなければならない問題であることを認識していません、それらを指す汎用リソースを使用すると、同じコンテンツをコメントで何度も繰り返すよりも簡単です。
itsjeyd 14年

1
とは
いえ

1
同意します-ユーザーがEmacsを使用するのを支援することです。このサイトはそのための手段です。
ドリュー

回答:


44

すべてのコマンドは機能ですが、すべての機能がコマンドでもあるわけではありません。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-eeval-last-sexp点付き)閉じ括弧の後に位置します。

関数をbarコマンドとして使用可能にするには、foo次のようにカスタムの対話型関数()でラップできます。

(defun foo ()
  (interactive)
  (bar))

もちろん、bar1つ以上の引数を取る場合、foo正しく動作させるためにそれらを指定する必要があります。

「機能」と「コマンド」という用語を同じ意味で使用している人がいる場合、これは(コンテキストに応じて)基礎となる概念の違いを認識していないことを示している可能性があります。


1ここでについて話していることに注意してdefunください。@Stefanがコメントで指摘しているように、キーボードマクロは特殊なケースです。コマンドと見なすことができますが、機能ではありません。


5
細かい点:interactive「呼び出し」は通常、宣言と呼ばれます(関数自体は実際には何もしません)。
shosti 14年

5
@itsjeyd:実際、いいえ、機能ではないコマンドもあります。これは、キーボードマクロの場合です。たとえば、M-: (commandp [?a]) RET(正しい)[?a]コマンドであることはわかりますが、関数ではありません。
ステファン

@Stefanそれを指摘してくれてありがとう。回答を更新しました。
itsjeyd
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.