clojureでマルチメソッドを試してみる
JavaのオーバーロードをClojureではどうやって表現するだろうと疑問に思い調べてみました。
結論としては、マルチメソッドを使用すれば可能。
以下は簡単なサンプル。
user> (defmulti hoge class) #'user/hoge user> (defmethod hoge String [x] (str "String " x)) #<MultiFn clojure.lang.MultiFn@77b4ee5e> user> (defmethod hoge Integer [x] (str "Integer " x)) #<MultiFn clojure.lang.MultiFn@77b4ee5e> user> (defmethod hoge nil [x] (str "nil " x)) #<MultiFn clojure.lang.MultiFn@77b4ee5e> user> (hoge "1") "String 1" user> (hoge 1) "Integer 1" user> (hoge nil) "nil "