2017-09-14 8 views
3

ラケットには、タイプごとの情報を構造体に追加する2つのメカニズムがあるようです:genericspropertiesです。残念ながら、ドキュメントは、どちらが優先されるのかを示すようには見えません。ドキュメントは次のようになります。ストラクチャのプロパティとラケットのジェネリック

汎用インタフェースは、構造型プロパティの上位に高レベルのAPIを提供します。

しかし、私がもう一方を使うべきであるときには、それは良い直感を提供してくれないようです。 define-genericは、make-struct-type-propertyよりはるかに高いレベルのインターフェイスを提供することは明らかです。しかし、多くの構造体型はまだプロパティーしか使用していません。これは、低レベルのAPIが好まれる場合がまだあることを示すようです。

したがって、構造体プロパティシステムをジェネリックプロパティシステムよりも使用しているとき、またはプロパティライブラリが歴史的な遺物としてしか存在しないときはどうでしょうか?

答えて

5

structプロパティーシステムは、汎用インターフェースライブラリーの実装方法です。したがって、非推奨ではありません。一般的なインターフェースを動作させるには、そのようなものが必要です。構造体プロパティのすべての用途が汎用インタフェースとしても意味をなさないわけではありません。多くの典型的な使用例では、define-generic形式が好ましいと言われています。 structのための#:methodsフォームが示唆するように、インターフェイスベースのディスパッチでオブジェクト指向の方法で編成されたコードには便利です。この例には、配列(gen:sequenceからdata/collectionまで)および辞書(gen:dict)が含まれる。

一般的に、ラケットコードベースのプレーン構造プロパティは、メタデータとして構造体に格納する必要があるデータや、「メソッド」が1つだけの場合に使用され、define-genericを使用する必要があります。 「ここにプロシージャを置く」よりも複雑です。例はprop:procedureまたはprop:evtです。

関連する問題