2012-05-25 16 views
11

レコードにはstruct-mapのようなものがありますか?もしそうでなければ、私は構造体を使うべきですか(ドキュメントは構造体の使用を阻止します)?マップからClojureレコードを取り込む方法は?

多分私は間違ったことを完全にやっていますか?私は現在、オプションの地図を取っている、かなり複雑な機能を持っています。私はオプションの値が受け入れられるか使用されるかを明確にしようとしています(それをレコードに置き換えて)。そして今、私は、この情報をマップに持つコード(そしてレコード内のデータのスーパーセットを含む)にインターフェイスしたいと考えています。

答えて

19

単純に "ドキュメント"用のレコードを使用することはお勧めできません。普通の古いマップは、より柔軟でシンプルで簡単です。ドキュメント化のためには、単にドキュメントストリングやコメントを追加するか、(defn make-whatever [thing1 thing2])のような関数を作成するだけです。

レコードが必要な場合は、Clojureバージョン1.3以上を使用しているかどうかによっていくつかの選択肢があります。その場合、(defrecord Whatever ...)は、map->Whatever関数を定義し、位置指定引数をとる->Whatever関数も定義します。そうでない場合は、(into (Whatever. nil nil nil) some-map)と書くことができます(レコードタイプに適切な数のnilsを渡します)。

関連する問題