在符号列表上调用打印对象
Invoking print-object on a list of symbols
我有一个符号、CLOS 对象的全局列表,以及相应的 print-object
定义的方法,可以为它们提供简洁的摘要。我想为用户提供一个 show-all
方法,该方法循环遍历它们并使用 print-object
打印我在 REPL 获得的相同输出。 earlier question 建议 method-function
查找具体方法,然后 funcall
它,但使用 closer-mop
不是一个选项。
我可以在循环中打印一个特定的对象,但不能遍历列表,例如:
(defun show-all (&optional (stream *standard-output*))
"Print summaries for all objects in the current environment"
(dolist (o *master-list*)
(format t "~A~%" o) ; prints symbol name as text
(print-object foo::my-object *standard-output*) ;prints my-object using print-object, this is what I want
(print-object o *standard-output*))) ; same as format, prints symbol-name as text
有人知道这里发生了什么吗?如果我可以使用 print-object
在环境中打印特定对象,我应该能够在符号列表上循环打印所有对象。
符号与其命名的事物不同。
由于 print-object
是一个(通用)函数,因此适用正常评估。它获取 foo::my-object
的 value 作为参数。它永远不会看到符号 foo::my-object
。如果您遍历一个符号列表,您仍然需要查找您想要的任何值,例如。 G。如果他们命名全局值,则使用 symbol-value
。
您已经将 print-object
方法专门用于某些 class,对吧?不是每个交易品种的 eql 专家?
我有一个符号、CLOS 对象的全局列表,以及相应的 print-object
定义的方法,可以为它们提供简洁的摘要。我想为用户提供一个 show-all
方法,该方法循环遍历它们并使用 print-object
打印我在 REPL 获得的相同输出。 earlier question 建议 method-function
查找具体方法,然后 funcall
它,但使用 closer-mop
不是一个选项。
我可以在循环中打印一个特定的对象,但不能遍历列表,例如:
(defun show-all (&optional (stream *standard-output*))
"Print summaries for all objects in the current environment"
(dolist (o *master-list*)
(format t "~A~%" o) ; prints symbol name as text
(print-object foo::my-object *standard-output*) ;prints my-object using print-object, this is what I want
(print-object o *standard-output*))) ; same as format, prints symbol-name as text
有人知道这里发生了什么吗?如果我可以使用 print-object
在环境中打印特定对象,我应该能够在符号列表上循环打印所有对象。
符号与其命名的事物不同。
由于 print-object
是一个(通用)函数,因此适用正常评估。它获取 foo::my-object
的 value 作为参数。它永远不会看到符号 foo::my-object
。如果您遍历一个符号列表,您仍然需要查找您想要的任何值,例如。 G。如果他们命名全局值,则使用 symbol-value
。
您已经将 print-object
方法专门用于某些 class,对吧?不是每个交易品种的 eql 专家?