Clojure 1.2でProtocolを試す
Tokyo.clj #2で、最近出たClojure 1.2でProtocolという仕組みが追加されたと聞いた。解説ビデオによると、マルチメソッドと似たようなことを、オーバーヘッド少なく実行するものらしい。
とりあえず試す。Clojure 1.2は、masa_edwさんの解説の方法で使う。
まずdefprotocolでProtocolを定義。SujiMojiというProtocolの中で、2引数を取る関数tasuと、1引数を取る関数nibaiを定義してみる。Javaのinterfaceと同じで、実装を含まない。
(defprotocol SujiMoji (tasu [a b]) (nibai [a]) )
でProtocolに対する実装。いくつかの方法があるようだけど、extend-protocolを使って、第1引数の型で処理を分けてみる。
(extend-protocol SujiMoji java.lang.String (tasu [a b] (str a b)) (nibai [a] (str a a)) java.lang.Integer (tasu [a b] (+ a b)) (nibai [a] (* a 2)) )
呼び出すコード。
(defn -main [] (println (tasu "123" "45")) (println (tasu 123 45)) (println (nibai "123")) (println (nibai 123)) )
ビルドしたあと、実行。
$ java -jar sujimoji-standalone.jar 12345 168 123123 246
とりあえず、それらしい結果になった。
コメント
コメントの投稿
トラックバック
https://emasaka.blog.fc2.com/tb.php/757-cb4ae48a