私は一連のURLを持っていて、URLの中には間接参照(ベクトルとして)を持っています。間接参照を持たないURLはすべてnil
です。私は、HTML形式のレポートを作成するためにhiccupを使用していますので、私はこの出力をしたいClojureでマップから入れ子になったベクトルを構築する
{"URL 1" nil,
"URL 2" ["indirect 1" "indirect 2"]}
:
[:div "Imports: "
[:ul
[:li "URL 1"]
[:li "URL 2"]
[:ul
[:li "indirect 1"]
[:li "indirect 2"]
[:li "indirect 3"]]]]
私は戻っていくつかの問題に実行している私は、次のテストマップで出始めていますURLに間接参照がない場合はnil。私の現在のコードは次のようになります。
(defn list-imports
[imports]
(if-not (nil? imports)
[:div "Imports: "
[:ul
(for [direct (keys imports)]
[[:li direct]
(if-let [indirects (get imports direct)]
[:ul
(for [indirect indirects]
[:li indirect])]
[:span])])]]
[:div "Imports: none" [:br] [:br]]))
問題は、それがこれを返すだ、である...
[:div
"Imports: "
[:ul
([[:li "URL 1"] [:span]]
[[:li "URL 2"] [:ul ([:li "indirect 1"] [:li "indirect 2"])]])]]
私は、間接的な輸入がnil
ているときのためのケースとして[:span]
タグに追加する必要がありました私はそこに本当に欲しくないのですが、そうでなければnil
に入れます。
もう1つの問題は、で囲まれ、余分なベクトルになります。これは、forステートメント内で複数のことを行うためです。ヒップアップで変換しようとすると、[:li "URL 1"] is not a valid element name.
これは完璧に機能しました、ありがとうございます!私はあまりにも多くの機能を1つの機能に詰め込もうとしていたと思います。私はmapvを使っているとは思っていませんでしたが、今のところ明らかです:) –