以下のマルチメソッドを考えると -
(defmulti group-data :group-by)
(defmethod group-data :day
[kv]
(->> kv :data (group-by
(fn [kv]
(let [date (:time kv)]
(str
(month date) "-" (day date) "-" (year date)))))))
(defmethod group-data :month
[kv]
(->> kv :data (group-by
(fn [kv]
(let [date (:time kv)]
(str
(month date) "-" (year date)))))))
(defmethod group-data :year
[kv]
(->> kv :data (group-by
(fn [kv]
(let [date (:time kv)]
(year date))))))
3 つのマルチメソッドすべてで、唯一の違いは文字列関数です。文字列を作成するために異なる s 式を取るだけの高階関数を作成するにはどうすればよいですか?
また、繰り返されるコードを減らすためのより良いアイデアはありますか?