最近版本的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)
我將此作爲接受的答案切換,因爲它更完整,並提供了完整的背景。 –