8

私はclojureの初心者であり、基本的にいくつかのチュートリアルに従おうとしています。について質問がありdefrecordます。

これが私がやろうとしていることです:

(defrecord somemap [key1 key2 key3 key4])

(defn give-me-map [m1 m2]
  (somemap. m1 m2))

上記のコードでは、オブジェクトを作成するたびに値を指定する必要がないように、オプションとして使用key3したいと思います。key4somemap

ここにも同様の質問がありますが、それは私がここでやろうとしていることの逆を行います。

defrecordでは、オプションのフィールドで定義することは可能ですか?

4

2 に答える 2

9

を使用する(defrecord T [...])と、 と の 2 つのファクトリ関数が作成され->Tますmap->T

1 つ目は、位置パラメータをキーとして使用します。2 番目は、任意のマップをレコードに適用します。

コンストラクターで and を保持して、 を使用key3できます。key4map->somemap

(defrecord somemap [key1 key2 key3 key4])

(defn give-me-map
  [key1 key2]
  (map->somemap {:key1 key1 :key2 key2}))
于 2012-11-15T07:22:26.950 に答える
6

Clojure のレコードはマップ インターフェイスを実装するため、コンストラクターで指定されたフィールドを除くすべてのフィールドはオプションです。

key1したがって、レコードを only andで宣言するのkey2は正しいです: only key1andkey2はコンストラクターで必要になりますが、他のマップと同様にレコードに値を関連付けることでkey3or key4(またはその他のキー) を簡単に設定できます。

于 2012-11-15T05:36:45.550 に答える