我想提供一些以:字符开头的clojure协议的方法。有没有办法在Clojure中覆盖它?
答案 0 :(得分:3)
不要这么认为。 Clojure关键字在读者中实现,我认为没有任何方法可以覆盖这种行为。
当您使用关键字作为函数时,这相当于(get arg:keyword)。您可以通过在协议中实现ILookup来扩展它的功能。
Joost的。
答案 1 :(得分:3)
听起来像个坏主意:冒号是为关键字保留的,所以即使你能做到这一点,我认为它也会造成一些令人困惑的代码。
当然,您可以将函数放在由关键字映射的记录中:
(defrecord Foo [])
(def foo (Foo. nil {:method (fn [a b] (* a b))}))
((:method foo) 7 10)
=> 70
我发现这有时是一个有用的技巧......