How do I do closures in Emacs Lisp?

后端 未结 8 1922
感动是毒
感动是毒 2020-12-01 03:12

I\'m trying to create a function on the fly that would return one constant value.

In JavaScript and other modern imperative languages I would use closures:



        
8条回答
  •  北荒
    北荒 (楼主)
    2020-12-01 03:39

    ;; -*- lexical-binding:t -*-
    
    (defun create-counter ()
      (let ((c 0))
        (lambda ()
          (setq c (+ c 1))
          c)))
    
    (setq counter (create-counter))
    
    (funcall counter) ; => 1
    (funcall counter) ; => 2
    (funcall counter) ; => 3 ...
    

提交回复
热议问题