Thank you for the responses. However, when I look here: http://clojure.org/multimethods
I see that it says: "You can define hierarchical relationships with (derive child parent). Child and parent can be either symbols or keywords, and must be namespace-qualified" Is there any way I can establish a hierarchical relationship without it being name-spaced qualified? I would like to be able to (slingshot/throw+ {:type some-symbol}) and have this be caught in a different namespace, but I need a way to match the some-symbol, and I would ideally like it if some-symbol might be part of a hierarchy, such that I'm matching again some-symbol's parent. Is that possible? I guess I could hard-code all of the namespaces, such that the symbols are all: some-namespace/some-symbol but that does great reduce the flexibility of the system. On Saturday, August 9, 2014 3:30:33 PM UTC-4, James Reeves wrote: > > Jozef is correct, but to give some examples: > > (ns example.core > (:require [example.other :as other])) > > (= ::foo :example.core/foo) > (= ::other/foo :example.other/foo) > > (not= :foo :example.core/foo) > (not= :example.core/foo :example.other/foo) > (not= :other/foo ::other/foo) > > - James > > > > On 9 August 2014 19:14, Jozef Wagner <jozef....@gmail.com <javascript:>> > wrote: > >> Keep in mind that :: is just a syntax sugar that is processed by the >> reader, before the compiler kicks in. ::foo is a shorthand for >> :your.current.ns/foo. Its purpose is to make it easy to create keywords >> that do not clash with other ones. >> >> Keywords are equal (and identical) only when both of their namespaces and >> names are equal. :ns1/foo is thus not equal to :ns2/foo, nor to just :foo. >> :: >> is used in cases where you want to exploit this important property of >> keywords, so that your keyword won't e.g. clash with other keywords in a >> collection, contents of which you don't know. >> >> Jozef >> >> >> On Saturday, August 9, 2014 7:46:45 PM UTC+2, larry google groups wrote: >>> >>> Please forgive this stupid question, but I'm still trying to understand >>> exactly what the double "::" means. I have read that I can use (derive) to >>> establish a hierarchy and I can imagine how this would be useful for things >>> like throwing errors and catching them and logging, but I've also read that >>> "::" adds the namespace to the symbol, so I would assume that I can not >>> match ::logging from one namespace with ::logging from another? >>> >>> I'm thinking of this especially in my use of Slingshot, where I was >>> thinking of doing something like: >>> >>> (throw+ {:type ::database-problem :message "something wrong in the >>> database query"}) >>> >>> and then at a higher level in my code I was going to catch it with >>> something like: >>> >>> (derive ::database-problem ::logging) >>> >>> and then using Dire: >>> >>> (dire/with-handler! #'database/remove-this-item >>> [:type ::logging] >>> (fn [e & args] >>> (timbre/log (str " database/remove-this-item: The time : " >>> (dates/current-time-as-string) ( str e)))) >>> >>> but conceptually I am having trouble understanding how ::logging in one >>> namespace can match ::logging in another namespace. Perhaps I should just >>> use normal keywords? >>> >>> >>> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to clo...@googlegroups.com >> <javascript:> >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> clojure+u...@googlegroups.com <javascript:> >> For more options, visit this group at >> http://groups.google.com/group/clojure?hl=en >> --- >> You received this message because you are subscribed to the Google Groups >> "Clojure" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to clojure+u...@googlegroups.com <javascript:>. >> For more options, visit https://groups.google.com/d/optout. >> > > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.