【发布时间】:2011-06-02 10:43:24
【问题描述】:
在 common-lisp 中,我想实现一种这样的参考系统:
假设我有:
(defclass reference () ((host) (port) (file)))
我也有:
(defun fetch-remote-value (reference) ...) 获取并反序列化一个 lisp 对象。
我如何干预评估过程,以便在评估引用对象时,获取远程值并再次重新评估以产生最终结果?
编辑:
更详细地描述我想要完成的工作:
使用 cl-store 我序列化 lisp 对象并将它们发送到要保存的远程文件(或 db 或任何东西)。成功存储后,我将主机、端口和文件保存在参考对象中。我想,每当在引用对象上调用 eval 时,首先检索该对象,然后对检索到的值调用 eval。由于引用也可以在其他(父)对象或聚合类型中序列化,因此我可以通过修改 eval 获得免费的递归远程引用解析,因此我不必自己遍历和解析加载对象的子引用。
编辑: 由于对象总是对自己进行评估,所以我的问题有点错误。基本上我想做的是:
我想拦截符号的评估,以便当它们的值是 REFERENCE 类型的对象时,而不是将对象作为符号评估的结果返回,而是返回 (fetch-remote-value object) 的结果?
【问题讨论】:
标签: lisp common-lisp eval