2017-09-14 21 views
3

球拍似乎有兩種機制可以將每種類型的信息添加到結構中:genericsproperties。不幸的是,這些文件似乎並沒有表明什麼時候一個人比另一個人更受歡迎。該文檔確實說:結構屬性vs球拍中的泛型

通用接口在結構類型屬性之上提供高級API。

但是,這似乎並沒有提供一個很好的直覺,當我應該使用一個在另一個。看起來很清楚define-generic提供比make-struct-type-property更高級別的接口。但是許多結構類型仍然只使用屬性,這似乎表明仍然存在低級API優先的情況。

所以問題是,什麼時候使用struct properties系統比使用泛型還要好,還是屬性庫只作爲歷史文物存在?

回答

5

struct屬性system是泛型接口庫的實現策略,所以不推薦使用。它或類似的東西有必要使通用接口起作用。並非所有結構屬性的使用都可以作爲通用接口。

也就是說,對於許多典型的使用情況,define-generic表單是首選。正如結構的#:methods表格所暗示的那樣,它對於以基於接口的分派以面向對象的方式組織的代碼非常有用。這樣的例子包括序列(來自data/collectiongen:sequence)和詞典(gen:dict)。

當一些數據只需要作爲元數據存儲在一個結構中,或者當只有一個「方法」,並且使用define-generic或接口是不必要的複雜時,通常會使用Racket代碼庫中的普通結構屬性比「只是把程序放在這裏」更復雜。例子包括prop:procedureprop:evt