1

にクロージャ動作を実装したくありませんElisp。コードは次のとおりです。

(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 を実行するたびに、expr(funcall bar 1)の結果を だけインクリメントすることです1。なぜうまくいかないのかわからないのですが、誰か説明してもらえますか?Emacs Lispでクロージャを行うにはどうすればよいですか? で同様の質問を見つけました。しかし、私はそれを理解することはできません。私の Emacs のバージョンは 24.2.1 で、lexical scoping.

4

1 に答える 1

1

lexical-binding変数はかなり特殊なので、絶対に使用しないことを強くお勧めしますsetq。最初の行のコメントでのみ定義して-*- lexical-binding: t -*-ください(そのコメントは、対応するファイルに再度アクセスした後にのみ有効になります)。

于 2013-01-22T20:13:34.260 に答える