结构属性与球拍中的泛型

Lei*_*sen 5 methods struct racket

Racket似乎有两种机制可以为结构添加每种类型的信息:genericsproperties.遗憾的是,文档似乎并未表明何时优先于另一个.文档说:

通用接口在结构类型属性之上提供高级API.

但是,当我应该使用一个而不是另一个时,这似乎并没有提供良好的直觉.它似乎很清楚,define-generic提供了比它更高级别的界面make-struct-type-property.但是许多结构类型仍然只使用属性,这似乎表明仍然存在低级API是首选的情况.

所以问题是,何时使用struct属性系统比使用泛型属性系统更好,或者属性库是否仅作为历史遗迹存在?

Asu*_*awa 7

struct属性系统是通用接口库的实现策略,因此不推荐使用它.它或类似的东西是使通用接口工作所必需的.并非所有struct结构属性的使用都是通用接口.

也就是说,对于许多典型的用例,define-generic表格是首选.正如#:methods结构体的表单所暗示的那样,对于以面向对象的方式组织的基于接口的调度的代码非常有用.这方面的例子包括序列(gen:sequencefrom data/collection)和字典(gen:dict).

当一些数据只需要作为元数据存储在结构中时,或者当只有一个"方法"并且使用起来不必要复杂define-generic,或者界面比"仅仅"更复杂时,通常会使用Racket代码库中的简单结构属性.把程序放在这里".例子包括prop:procedureprop:evt.