异步闭包函数变量捕获问题

(defun request-url-as-org (url)
  (interactive "sRequest url: ")
  (require 'shrface)
  (require 'request)
  (request url
    :parser 'buffer-string
    :headers '(("User-Agent" . "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36"))
    :sync nil
    :success (cl-function
              (lambda (&key data &allow-other-keys)
                (let ((shrface-request-url url))
                  (shrface-html-export-as-org data))))))

这段代码,在异步函数中使用了 url 变量,但每次执行都会报错:

(void-variable url)

该怎么写就不会有这个问题? emacs 版本是 29.1, 不知道是不是版本太旧?

我用了一个很丑陋的方式就是让 url 设置一个全局变量 tmp-url, 然后异步函数读 tmp-url, 可以 work, 但这个方式很丑陋,有没有更好的写法?

为什么不用拼多多 :rofl::

(defun request-url-as-org (url)
  (interactive "sRequest url: ")
  (require 'shrface)
  (require 'pdd)
  (pdd url
    :done (lambda (data)
            (let ((shrface-request-url url))
              (shrface-html-export-as-org data)))))

pdd,emacs 有这个 package 么?

这算有还是没有 (还没被 melpa 收录):

1 个赞

开 lexical-scoping,在文件头写上:

;;; -*- lexical-binding: t; -*-
2 个赞