如题11111111
(mapc (lambda (sym)
(when (fboundp sym)
(do something with sym)))
obarray)
2 个赞
错误的, 你不应该直接在 obarray
上迭代, 这样的结果会有遗漏.
ELisp 手册上特地指出了这一点及其原因.
正确的做法:
3 个赞
我不需要所有函数,只要所有顶级函数就行了,不过可以遍历所有函数也挺好
问题在于 obarray
压根不能保证遍历所有的符号, 它可能会遗漏你想要的. 它也不是 vector, 它是 C 实现的 vector-like 的数据结构, 是一种哈希表
1 个赞
那好,用你的方法
同样作用直接用 obarray-map
效率更高
1 个赞
你去看一下 obarray-map
的函数定义, 我突然好奇这个函数存在的意义是啥
因为先有 mapatoms
,但是这个名字不容易让人发现它和 obarray 有关系,就定义了对应的 alias
obarray-get
obarray-put
都是同理
1 个赞
我的感觉是 怎么不用 ctrl+h f tab
,不比scratch更好,我这显示是 26529 possible completions
, 不知道是否包含emacs中的所有函数。
标题存在歧义。如果不看回帖,我以为是:
你在 strach buffer 中写了一堆 elisp 代码,你想遍历其中的顶级(即缩进为0)函数。如果不是这个意思,没必要强调【在scratch buffer 中】。
1 个赞