上下文:让我们创建一个百分比编码器。因此,字符将被编码为他们的 % 表示。另外,我希望字符串向量将像这样编码:[a b] -> (str (encode a) "+" (encode b))
. 背后的原因是我希望空格被编码%20
为字符串和字符串列表+
。我使用协议做了这个:
(defprotocol IUrlEncodable
(^String url-encode [v]))
(extend-protocol IUrlEncodable
String
;; Do I need type here? I have it in the protocol.
(^String url-encode [v]
(-> v URLEncoder/encode (.replace "+" "%20")))
IPersistentVector
;; Same question here.
(^String url-encode [v]
(->> v (map url-encode) (join "+"))))
这是一种规范的方法吗?我做对了吗?什么是替代品?如果我在协议中声明了类型提示,是否需要在协议扩展中重新声明类型提示?