非常感谢!帮助很大。
这两天又着重看了一些介绍 CLOS 的文档或者示例,再返回去看 PCL 的这一部分内容,的确,把定义宏部分的内容抛开,好象是简单很多了……
【 在 wolfgang (狂云) 的大作中提到: 】
: 标 题: Re: 问个数据结构读写的问题(Common Lisp)
: 发信站: 水木社区 (Thu Feb 27 05:15:46 2020), 站内
:
: 看起来,practical common lisp书里介绍的就是比较实用的方法了。
:
: 可以简省的首先是定义宏的部分。不妨试试看把所有的宏定义部分都跳过,
: 直接看涉及defmethod read-value与write-value的部分?
:
: 这方面,基本的思想就是,read-value与write-value接受这样几个
: 参数:字段名、类型、长度。它们根据不同的类型来进行不同的
: 存取,并且输出(返回)指定的值。可以看到,不同数据类型的
: 二进制存取机制是完全不同的,所以面向对象的多态性思想在此
: 很有用。
:
: 但我们也可以完全跳过面向对象思想。面向对象、多态性,在这
: 里的用途就是一个豪华级的cond或者case分发。所以,你可以用
: cond或者case来代替面向对象,实现这个分发功能,也就是说,
: 根据不同的类型来进行不同的存取操作。
:
: 对二进制数据的整体marshal,这个功能在C语言里是内建的,
: 因为这是C语言的专属领域。同时,后来很多模仿C语言的“花括号”
: 语言也继承了这个功能。但是,lisp里没有,所以我们需要
: 专门写一个循环,在循环里写cond或者case,来一个一个字段
: 地marshal。
:
: 在读取时,如果你事先能肯定每个字段的二进制长度,那么也
: 可以考虑先按照它们的长度把它们切分开来,然后用mapcar来
: 一个个处理。
:
: 希望上述解释对你有用~
:
: 【 在 snoopyzhao (只打酱油,不兼职) 的大作中提到: 】
: : 就是有一个(二进制)数据结构,大概这个样子:
: : id: 定长字符串
: : ver: 单精度符点数
: : ...................
:
: --
: 热二定律比动量守恒更高
: 它告诉我们世界的原初是恨
:
: 爱, 就是对恨的战斗!
:
:
: ※ 来源:·水木社区 newsmth.net·[FROM: 101.88.36.*]
--
FROM 120.244.236.*