小编Fra*_*ben的帖子

对于defmethod和defun,Common Lisp特殊变量范围有什么不同?

要么我缺少一些非常愚蠢的东西,要么特殊变量的范围对于defmethod和defun意外地不同(使用SBCL 1.1.14测试):

  1. 正如所料:

    (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)
  2. 让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)

scope common-lisp

2
推荐指数
1
解决办法
176
查看次数

标签 统计

common-lisp ×1

scope ×1