Clojure學習之defmulti

1. defmulti  java

  宏defmulti 和defmethod 常常被用在一塊兒來定義 multimethod. 宏defmulti 的參數包括一個方法名以及一個dispatch函數,這個dispatch函數的返回值會被用來選擇到底調用哪一個重載的函數。宏defmethod 的參數則包括方法名,dispatch的值, 參數列表以及方法體。一個特殊的dispatch值:default 是用來表示默認狀況的 — 即若是其它的dispatch值都不匹配的話,那麼就調用這個方法。defmethod 多定義的名字同樣的方法,它們的參數個數必須同樣。傳給multimethod的參數會傳給dipatch函數的。實現相似java的重載函數

示例:spa

1 (defmulti what_am_i class)
2 (defmethod what_am_i Number [args] (println args "is num"))
3 (defmethod what_am_i String [args] (println args "is String"))
4 (defmethod what_am_i :default [args] (println args "is default"))
5 (what_am_i 19)
6 (what_am_i "luochao")
7 (what_am_i true)
相關文章
相關標籤/搜索