工作,我wan't以實現Elisp
閉合行爲,這裏是代碼:爲什麼此代碼不能使用Emacs,口齒不清
(setq lexical-binding t)
(setq var 3)
(require 'cl)
(defun foo (n)
#'(lambda (i)
(incf n i)))
(defvar bar (foo var))
(funcall bar 1)
我想要得到的是,每次我運行EXPR :(funcall bar 1)
它會將表達式的結果增加1
。我不知道爲什麼它不能工作,有人能解釋給我嗎? 我發現在How do I do closures in Emacs Lisp?類似的問題,但我無法理解這一點。我的Emacs版本是24.2.1,似乎支持lexical scoping
。
每次評估'(funcall bar 1)',你都會得到序列中的下一個數字(從4開始)。你的代碼確實創建了一個閉包。你期待'var'改變價值嗎? (通過Emacs 24.1驗證) –
@Trey Jackson我得到了'setq:Symbol作爲變量的值爲void:n'的錯誤,它不能在我的Emacs中工作,我不希望'var'改變,I只是想看看如何使關閉工作。它在你的Emacs中有效嗎? – toolchainX
是啊,該代碼工作是我的Emacs(24.1),我只是剪切/粘貼/再次evaled它。 –