emacs / elisp:ハッシュ(ポンド、番号記号、オクトソープ)記号は何に使用されますか?


102

これは何をしますか?

(add-hook 'compilation-mode-hook #'my-setup-compile-mode)

...そしてそれは

(add-hook 'compilation-mode-hook 'my-setup-compile-mode)

回答:


98

違いはありません:

(eq 'my-add #'my-add)

収量 t

を式の#前で使用しlambdaて、次の式をバイトコンパイルできることをバイトコンパイラに示すことができます。匿名関数のドキュメントを参照してください。ただし、シンボルの場合はコンパイルするものはありません。

一般に、印刷されたオブジェクトが説明であることを示すために、左の山かっこ(<)と共に印刷表現で使用されます(ただし、読み取ることはできません)。例えば:

#<buffer foo.txt>

また、読者が構造体で循環構造を表すためにも使用されます。円形オブジェクトの読み取り構文のドキュメントを参照してください。

そして、あなたは整数底を示すためにそれを使用します、例えば#x2c -> 44

さらに、私は確信しています。


12
この記事によると#、単独のシンボルに適用する理由の1つは、そのシンボルが定義されていない場合にコンパイル時に診断を取得することです。
ajk 2014年

3
「シンボルの場合、コンパイルするものが何もない」というのは、真実ではありません。バイトコンパイラは# 'carを「シンボルfooではなく、常に関数 `foo'を指している」と解釈します。次に、バイトコンパイルされた出力でfooの定義を実際にインライン化します。(編集:いいえ、それは実際には間違っています。#のシンボルは、「シンボル」と異なる方法でバイトコンパイルされることはありません。これは単なる意図のマーカーです。)
Jonathan Tomer

11
おそらく、それが構文的に'symbol表され(quote symbol)、構文的に#'symbol表されることにまだ言及しているかもしれません(function symbol)
tripleee 2015年


25

ハッキング中に見つけたもののハッシュの意味を検索しているときに、この質問を見つけましたmode-line-format

#("-%-" 0 3
  (help-echo "Display as tooltip when mouse hovers or with display-local-help."))

これは、文字列のテキストプロパティに使用される形式です。

  • "-%-"、テキストをプロパティ化する:1つのダッシュと%-構文により、「モード行の残りの部分を埋めるのに十分なダッシュ」が得られ、有名なEmacsになり------ます。
  • 0、テキストのプロパティが適用される最初の文字。
  • 3、テキストプロパティが適用される最後の文字、つまり全体"-%-"
  • (help-echo "...")、プロパティとその引数としての文字列。

これは次のpropertize関数で作成できます:

(propertize "Hover over me!" 'help-echo '"congratulations!")

(insert(propertize "Hover over me!" 'help-echo' "Congratulations!"))

と同じになります#("Hover over me!" 0 14 (help-echo "Congratulations!"))

小さな例。

フォントロックモードを使用している場合、buffer-substringコマンドを使用すると、次のような結果が得られます。

(buffer-substring 1 28) ; First 27 characters in the current buffer
  #(";; This buffer is for notes"
     0 3
     (fontified t face font-lock-comment-delimiter-face)
     3 27
     (fontified t face font-lock-comment-face))

したがって、次のようなものを作成できます。

複数のプロパティに対応するプロパティ関数を表示します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.