Lei*_*sen 5 methods struct racket
Racket似乎有两种机制可以为结构添加每种类型的信息:generics和properties.遗憾的是,文档似乎并未表明何时优先于另一个.文档说:
通用接口在结构类型属性之上提供高级API.
但是,当我应该使用一个而不是另一个时,这似乎并没有提供良好的直觉.它似乎很清楚,define-generic提供了比它更高级别的界面make-struct-type-property.但是许多结构类型仍然只使用属性,这似乎表明仍然存在低级API是首选的情况.
所以问题是,何时使用struct属性系统比使用泛型属性系统更好,或者属性库是否仅作为历史遗迹存在?
struct属性系统是通用接口库的实现策略,因此不推荐使用它.它或类似的东西是使通用接口工作所必需的.并非所有struct结构属性的使用都是通用接口.
也就是说,对于许多典型的用例,define-generic表格是首选.正如#:methods结构体的表单所暗示的那样,对于以面向对象的方式组织的基于接口的调度的代码非常有用.这方面的例子包括序列(gen:sequencefrom data/collection)和字典(gen:dict).
当一些数据只需要作为元数据存储在结构中时,或者当只有一个"方法"并且使用起来不必要复杂define-generic,或者界面比"仅仅"更复杂时,通常会使用Racket代码库中的简单结构属性.把程序放在这里".例子包括prop:procedure或prop:evt.