最近版本的Emacs支持elisp代码中变量的词法绑定。是否也可以在词汇上重新定义函数?换句话说,Emacs Lisp有类似lexical-flet
的东西吗?emacs lisp是否支持词法重新定义函数?
回答
在Emacs < 24.3中,您可以使用(require 'cl)
然后使用labels
。在Emacs-24.3及更高版本中,您也可以执行(require 'cl-lib)
,然后使用cl-flet
或cl-labels
。
所有这些都是生成类似(let ((fun (lambda (args) (body)))) ... (funcall fun my-args) ...)
的代码的“复杂宏”,因为底层语言本身不支持本地函数定义。
有labels
,但我不知道这是你在找什么:
(defun foo()
42)
(defun bar()
(foo))
(list
(foo)
(bar)
(labels ((foo()
12))
(list (foo)
(bar)))
(foo)
(bar))
它返回(42 42 (12 42) 42 42)
。
对我24.2.1返回“Symbol的函数定义是void:labels” –
'(require'cl)'。如果您有足够的版本,请使用'(cl-labels ...)'代替。 – Hugh
文档字符串说:“这就像'flet',除了绑定是词法”。这正是我想要的。谢谢! –
- 1. Emacs lisp高阶函数支持
- 2. 有没有办法在emacs lisp中取消定义函数?
- 3. 无法用我的Emacs-Lisp宏定义函数
- 4. SQL是否支持重新定义基础操作符?
- 5. Idris是否支持展开函数定义?
- 6. QMap是否支持自定义比较函数?
- 7. Intellij Ideavim插件是否支持复杂的函数定义?
- 8. std ::函数是否支持自定义分配器?
- 9. SQL用户定义函数是否支持SELECT子句?
- 10. 在Emacs Lisp中,如何检查变量是否被定义?
- 11. Emacs 23是否支持prog-mode-hook?
- 12. emacs是否支持多列编辑?
- 13. emacs自定义C++编译支持
- 14. joomla virtuemart是否支持重新排序?
- 15. 自定义同义词支持lucene
- 16. Common lisp:重新定义范围内的现有函数?
- 17. algolia是否支持自定义域名?
- 18. 球拍是否支持内部“定义”?
- 19. Solr是否支持自定义FunctionQuery?
- 20. Prototype.js是否支持自定义伪类?
- 21. Clang ++是否支持libC++支持constexpr数学函数
- 22. 互动的Emacs Lisp函数交换两个词互相
- 23. Oracle是否支持EVENTDATA()函数?
- 24. Elasticsearch 2.4是否支持.gte函数?
- 25. 是否有支持`va_list`的`printk()`函数?
- 26. UniData支持用户定义函数
- 27. 符号的函数定义是void:incf(emacs24中的常用lisp函数)
- 28. Emacs是否支持Ruby 2.0字体的字体锁定?
- 29. Lisp中的词法绑定
- 30. 此功能未定义:IF(Emacs Lisp)
我将此作为接受的答案切换,因为它更完整,并提供了完整的背景。 –