要么我缺少一些非常愚蠢的东西,要么特殊变量的范围对于defmethod和defun意外地不同(使用SBCL 1.1.14测试):
正如所料:
(defun ttprint-object (prefix out)
(format out "~A: in defun: < ~A >~%" prefix *print-readably*))
(let ((*print-readably* t))
(format t "let: calling defun: < ~A >~%" *print-readably*)
(ttprint-object "from let" t))
let: calling defun: < T >
from let: in defun: < T >
Run Code Online (Sandbox Code Playgroud)让defmethod与defun不同,所以出乎意料:
(defclass empty () ())
(defmethod print-object ((self empty) out)
(format out "in defmethod: < ~A >~%" *print-readably*)
(ttprint-object "from defmethod" out))
(let ((*print-readably* t))
(ttprint-object "from let" t)
(format t "let: calling defmethod: …Run Code Online (Sandbox Code Playgroud)