emacs / elisp:哈希(磅,数字符号,八度)的含义是什么?


102

这是做什么的?

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

...与

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

Answers:


98

没有区别:

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

产量 t

所述#可在前方使用lambda指示字节编译器下面的表达式可以是编译字节表达,请参阅文档匿名函数。但是在符号的情况下,没有什么可以编译的。

通常,它在打印的表示形式中与左尖括号(<)一起使用,以指示打印的对象是描述(但无法读取)。例如:

#<buffer foo.txt>

读者也可以在构造中使用它来表示圆形结构。请参阅文档以获取“循环对象的读取语法”

然后,您可以使用它来表示整数底数,例如#x2c -> 44

另外,我敢肯定。


12
根据本文,应用#到一个单独的符号的一个很好的理由是,如果该符号未定义,则在编译时进行诊断。
2014年

3
“在符号的情况下没有什么可编译的”并不是很正确。字节编译器将#'car解释为“我一直指的是函数'foo',而不是符号foo。” 然后,它实际上可以在字节编译输出中内联foo的定义。(编辑:不,这实际上是错误的。#'符号的字节编译不会与'符号相同-它只是意图的标记。)
Jonathan Tomer 2014年

11
也许仍然提到'symbol代表(quote symbol)和句法#'symbol代表(function symbol)
2015年

27

可以理解的列表可以在Emacs lisp参考索引的顶部找到。

编辑:或者甚至更方便地从Emacs自身内部:

  • M-x info RET (打开信息浏览器)

  • d m elisp RET (打开elisp手册)

  • I # RET(列出#索引中的条目)


25

我在搜索哈希在黑客攻击中发现的含义时发现了这个问题mode-line-format

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

这是用于字符串中文本属性的格式其中:

  • "-%-",要修饰的文本:一个破折号和一个%-construct导致“破折号足以填充模式行的其余部分”,从而产生了著名的Emacs ------
  • 0,文本属性所应用的第一个字符。
  • 3,文本属性适用的最后一个字符,整个"-%-"
  • (help-echo "..."),一个属性和一个字符串作为其参数。

可以使用以下propertize函数创建:

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

(插入(对“将鼠标悬停在我身上!”'help-echo'“恭喜!”))

将与#("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))

因此,您可以创建如下内容:

显示多个属性的对应属性。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.