記号の前の「#」と「#」の違いは何ですか?


22

私はEmacsに少し慣れていない。いくつかの構成を見ると、「add-hook」に2つのタイプのコマンドがあることがわかりました。

(add-hook 'LaTeX-mode-hook #'LaTeX-math-mode)

そして

(add-hook 'LaTeX-mode-hook 'LaTeX-math-mode)

これは私を長い間混乱させており、Googleで「#」を検索する方法がわかりません...

ありがとう。


2
すみません、悪いです。答えが見つかりました:stackoverflow.com/questions/2701698/…–
X.Arthur


2
他のサイトでの複製は問題ありません。ただし、ここには1つありますが、ほとんど重複しています。emacs.stackexchange.com/q/3595/50
マラバルバ

回答:


21

Emacs Lispでは、if fooがシンボルである場合'foo、and #'fooは完全に同等です。後者の形式(と#')はfoo、関数である場合に優先されます。これは、関数がfuncalledであることが意図されているという事実を文書化するためです。

したがって、2つのフォームは完全に同等であり、2つのフォームが#'優先されます。

編集:Malabarbaが指摘したように、これはまったく真実ではありません:#'関数が定義されていない場合、シンボルではバイトコンパイラーが警告を発します。

(これはラムダ形式の場合ではないことに注意してください。これは、他の場所で文書化されている'ように、プレーンがバイトコンパイラによるラムダ形式のコンパイルを妨げるためです。さらに、例えばCommon Lisp は事前バインディングを実行します。)#'foo


警告について。ラムダについては、#'ないプレーンな引用とは対照的に、ラムダをコンパイルするコンパイラに指示します。願わくばより明確な方法で再編成しました。
-jch
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.