假设我有一段展示mapcar使用示例的代码
(mapcar #'1+ (list 10 20 30)) ; ⇒ (11 21 31)
(mapcar (lambda (it)
(* 2 it))
(list 0 1 2 3))
;; ⇒ (0 2 4 6)
(require cl-lib)
(cl-mapcar #'+
'(1 2 3)
'(10 20 30))
;; ⇒ (11 22 33)
我可能会将那段代码保存在某个地方,以便在教程中使用或者每当我忘记mapcar的用法时,可以快速阅读该代码。
现在假设我想要更新一些示例代码。例如,我可能会将第二个示例中的(list 0 1 2 3)
更改为其他列表。在我更改示例后,相应的结果注释就已经过时了。需要更新结果注释。因此,我评估表单,复制结果,并用新结果替换注释中的旧结果。有没有一个软件包可以帮助我轻松地完成所有这些工作,减少繁琐的操作?这是不同于litable或ielm软件包解决的问题,因为这仅仅是关于更新现有示例代码的问题。
目前我使用的是:
(defun my-insert-eval-last-sexp ()
(interactive)
(let ((beg (point)))
(let ((current-prefix-arg '(4)))
(call-interactively 'eval-last-sexp))
(goto-char beg)
(if (looking-back ")")
(insert " ; "))
(insert "⇒ ")
(move-end-of-line 1)))
这还不够,因为它只是添加了新的评论结果,而没有更新旧的评论。并且当表单计算出数字时会有奇怪的东西被插入,这是一个bug:
(+ 1 2)
;; ⇒ 3 (#o3, #x3)