emacs/elisp:哈希(磅,数字符号,八角形)符号用于啥?
Posted
技术标签:
【中文标题】emacs/elisp:哈希(磅,数字符号,八角形)符号用于啥?【英文标题】:emacs/elisp: What is the hash (pound, number sign, octothorp) symbol used for?emacs/elisp:哈希(磅,数字符号,八角形)符号用于什么? 【发布时间】:2011-02-11 16:51:08 【问题描述】:这是做什么的?
(add-hook 'compilation-mode-hook #'my-setup-compile-mode)
...和它有什么不同
(add-hook 'compilation-mode-hook 'my-setup-compile-mode)
【问题讨论】:
【参考方案1】:没有区别:
(eq 'my-add #'my-add)
收益t
#
可以用在 lambda
表达式前面,向字节编译器指示以下表达式可以进行字节编译,请参阅Anonymous Functions 的文档。但是在符号的情况下没有什么要编译的。
一般在printed representation 中与左尖括号(
#<buffer foo.txt>
它也被读者用在构造中来表示循环结构。请参阅Read Syntax for Circular Objects 的文档。
然后你可以用它来表示base for integers,例如#x2c -> 44
.
我相信还有更多。
【讨论】:
根据this article,将#
应用于单个符号的一个很好的理由是,如果该符号未定义,则在编译时进行诊断。
“在符号的情况下没有什么可编译的”并不完全正确。字节编译器将#'car 解释为“我总是指的是函数‘foo’,而不是符号foo。”然后它实际上可以在字节编译的输出中内联 foo 的定义。 (编辑:不,这实际上是错误的。#'symbol 不会与 'symbol 进行任何不同的字节编译——它只是一个意图标记。)
也许还提到'symbol
在语法上代表(quote symbol)
和#'symbol
代表(function symbol)
。【参考方案2】:
可以在Emacs lisp reference index 的顶部找到应该全面的列表。
编辑:或者更方便的是,从 Emacs 本身:
M-x info
RET(打开信息浏览器)
d m elisp
RET(打开elisp手册)
I #
RET(在索引中列出#
的条目)
【讨论】:
【参考方案3】:我在搜索我在 hacking mode-line-format
时发现的哈希的含义时发现了这个问题:
#("-%-" 0 3
(help-echo "Display as tooltip when mouse hovers or with display-local-help."))
这是用于text properties in strings 的格式,其中:
"-%-"
,要属性化的文本:一个破折号和一个%-construct,导致“破折号足以填充模式行的其余部分”,从而产生著名的 Emacs ------
。李>
0
,文本属性应用的第一个字符。
3
,文本属性应用的最后一个字符,即整个"-%-"
。
(help-echo "...")
,一个属性和一个字符串作为其参数。
这可以使用propertize
function:
(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))
所以你可以创建类似的东西:
【讨论】:
以上是关于emacs/elisp:哈希(磅,数字符号,八角形)符号用于啥?的主要内容,如果未能解决你的问题,请参考以下文章