1

出力の一部としてキーと一緒にすべての値を処理して追加するために使用したいマップがあります。

(def map {:a (:b :c :d) :e (:f :g :h)})

「for all keys return "a: contains (:b :c and :d) "」を実行し、文字列を一緒に追加して最終出力を取得します: "a: contains (:b :c and :d) :e (:f :g および :h) を含む""

私は最初に dosq を試し、マップでキーと値を 'k' と 'v' に分解しようとし、次に (str k "contains " v) で文字列を取得してファイルに吐き出しました。

これは何もしなかったので、キーと値のペアを示す print ステートメントを追加しました。それらは印刷されましたが、ファイルに追加されませんでした。

私が読んだところ、doseq と交換可能であるが怠け者であるが決定的に値を返す「for」を使用する必要があるようです。

for に即座に変更すると、間違った量のパラメーター エラーが発生しました。これは、2 つのデストラクチャと文字列を返すメソッド本体があったため、奇妙です。いじって、for ループをコンパイルすることになりましたが、オブジェクトを内容ではなく文字列として取得します。

これは私を狂気に駆り立てています。

誰かが私がしなければならないことを手伝ってもらえますか?

どうもありがとう、

4

1 に答える 1

1

まず、Joostが言ったことは的確です。

これが欲しいと思いますか?

(def my-map {:a '(:b :c :d) :e '(:f :g :h)})

(apply str (map #(str (first %) " contains " (second %) " ") my-map))
":a contains (:b :c :d) :e contains (:f :g :h) "
于 2012-11-16T18:35:48.927 に答える