本を読む

読書やコンピュータなどに関するメモ

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

 とりあえず、それらしい結果になった。

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://emasaka.blog65.fc2.com/tb.php/757-cb4ae48a

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad