私はしばらくの間、この小さな Clojure スニペットと格闘してきましたが、もっと慣用的で単純なアプローチがあると感じ続けていました。
望ましい行動; "1" -> true、"0" -> false に変換します。それ以外の場合は、引数をそのまま返します。
(= (mapper {:column 0} ["monkey" "stuff"]) "monkey")
(= (mapper {:column 0} ["1" "stuff"]) true)
(= (mapper {:column 0} ["0" "stuff"]) false)
これは私の最初の試みでした。単純な命令型アプローチ:
(defn mapper
[attr-map row]
(let [x (row (:column attr-map))
y ({"1" true "0" false} x)]
(if (nil? y)
x
y)))
2 回目の試行:
(defn mapper
[attr-map row]
((comp #({"1" true "0" false} % %) row :column) attr-map))
誰でもより良い解決策を見つけることができますか?