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.

Reply via email to