2011-01-10 20 views
2

我已經定義了以下代碼,以允許我在java.sql.PreparedStatement中設置列值。這段代碼是否合理/慣用?如何改進?使用Clojure do-template設置預準備語句列

(use '(clojure.template :only [do-template])) 
; (import all java types not in java.lang) 

(defprotocol SetPreparedStatement 
    (set-prepared-statement [this prepared-statement index])) 

(do-template [type-name set-name] 
    (extend-type type-name 
    SetPreparedStatement 
    (set-prepared-statement [this prepared-statement index] 
     (set-name prepared-statement index this))) 

    BigDecimal .setBigDecimal 
    Boolean .setBoolean 
    Byte .setByte 
    Date .setDate 
    Double .setDouble 
    Float .setFloat 
    Integer .setInt 
    Long .setLong 
    Object .setObject 
    Short .setShort 
    Time .setTime 
    Timestamp .setTimestamp) 

; Sample use 
(set-prepared-statement 42 some-prepared-statement 1) 

回答

1

你的例子看起來接近慣用的Clojure我可以告訴大家:) 這也許可以從抽象類型映射出來,如果你有在這裏您將創建雖多於一個模板,如果你只是建立的情況下受益這一個,那麼這對我來說看起來很不錯。