Something very odd going on here - one day it works the next day it fails :(

$ lein repl
nREPL server started on port 51502
REPL-y 0.1.10
Clojure 1.5.1
    Exit: Control+D or (exit) or (quit)
Commands: (user/help)
    Docs: (doc function-name-here)
          (find-doc "part-of-name-here")
  Source: (source function-name-here)
          (user/sourcery function-name-here)
 Javadoc: (javadoc java-object-or-class-here)
Examples from clojuredocs.org: [clojuredocs or cdoc]
          (user/clojuredocs name-here)
          (user/clojuredocs "ns-here" "name-here")
user=> (require '[clojure.string :as s])
nil
user=> ; code from the clojure google group to help map properties into 
paths

user=> ; first a way to take the keys and produce a regex

user=> (defn key-pattern
  #_=>   "Create a regex Pattern of the form '<key1>|<key2>', the key names
  #_=>   will be quoted in case they contain special regex characters"
  #_=>   [m]
  #_=>   (->> (keys m)
  #_=>     (map #(java.util.regex.Pattern/quote (keyword %)))
  #_=>     (s/join "|")
  #_=>     java.util.regex.Pattern/compile))
#'user/key-pattern
user=> 

user=> ; second a way to use the above function to achieve the replacement

user=> (defn replace-map [text m]
  #_=>   "Replace keys in a String from matching values in a map"
  #_=>   (s/replace text
  #_=>     (key-pattern m)
  #_=>     (fn [field-name]
  #_=>       (java.util.regex.Matcher/quoteReplacement (str (get m (keyword 
field-name)))))))
#'user/replace-map
user=> 

user=> (def param-map {:$tld "com"})
#'user/param-map
user=> 

user=> (def url (replace-map "https://google.$tld"; param-map))
ClassCastException clojure.lang.Keyword cannot be cast to java.lang.String 
 user/key-pattern/fn--352 (NO_SOURCE_FILE:6)

user=> 

You see my full REPL session.

I reckon I must be doing something dumb wrong - any ideas on what's going 
on?

Thanks

Ray

On Saturday, 20 April 2013 09:51:21 UTC+2, Mond Ray wrote:
>
> Just tried again - using lein repl (clojure 1.4.0) and it worked fine.
>
> It was late - who knows what I did ;-)
>
> Thanks for checking guys.
>
> On Saturday, 20 April 2013 02:37:14 UTC+2, Andy Fingerhut wrote:
>>
>> I fired up a Clojure 1.5.1 REPL, did (require '[clojure.string :as s]) 
>> first, then copied and pasted those two function definitions, and did not 
>> get the errors you are seeing.  I don't have a good guess why you are 
>> getting those errors.  Did you do the require first?  What version of 
>> Clojure are you using?
>>
>> Andy
>>
>>
>> On Fri, Apr 19, 2013 at 5:17 PM, Mond Ray <mondr...@gmail.com> wrote:
>>
>>> Old thread but what the heck... it doesn't work in my REPL
>>>
>>> user=> (defn key-pattern
>>>   #_=>     "Create a regex Pattern of the form '<key1>|<key2>', the key 
>>> names
>>>   #_=> will be quoted in case they contain special regex characters"
>>>   #_=>     [m]
>>>   #_=>     (->> (keys m)
>>>   #_=>         (map #(java.util.regex.Pattern/quote (name %)))
>>>   #_=>         (s/join "|")
>>>   #_=>         java.util.regex.Pattern/compile))
>>> #'user/key-pattern
>>> user=> 
>>>
>>> user=> (defn replace-map [text m]
>>>   #_=>     (s/replace text
>>>   #_=>        (key-pattern m)
>>>   #_=>        (fn [field-name]
>>>   #_=>           (java.util.regex.Matcher/quoteReplacement (str (get m
>>>   #_=> (keyword field-name)))))))
>>> #'user/replace-map
>>> user=> (replace-map "/path/:p0/b/:p1" {:p0 "1" :p1 "2"})
>>> ClassCastException java.lang.String cannot be cast to clojure.lang.IFn 
>>>  user/key-pattern/fn--408 (NO_SOURCE_FILE:6)
>>>
>>> user=> (key-pattern {:a 1})
>>> ClassCastException java.lang.String cannot be cast to clojure.lang.IFn 
>>>  user/key-pattern/fn--408 (NO_SOURCE_FILE:6)
>>>
>>> Am I doing something wrong or is there a typo in your code?
>>>
>>>
>>>
>>> On Tuesday, 15 March 2011 16:35:04 UTC+1, Aaron Cohen wrote:
>>>
>>>> On Mon, Mar 14, 2011 at 2:17 PM, Daniel Solano Gomez
>>>> <clo...@sattvik.com> wrote:
>>>> > On Mon Mar 14 13:02 2011, shuaybi2 shuaybi2 wrote:
>>>> >> I have a string such as:
>>>> >>
>>>> >> "select * from account where acctId = _ACCT-ID_ and acctTyp = 
>>>> _ACCT-TYP_"
>>>>
>>>> There are several clojure libraries that exist to improve the ease and
>>>> safety of doing something like this. Amongst them are
>>>> clojure.contrib.sql and ClojureQL, which take different approaches.
>>>> They all should be sufficient to guard against SQL injection and
>>>> should probably be the first place you look.
>>>>
>>>> For the more general question you were asking about how to generically
>>>> replace a map of matches-to-replacements though, Daniel did a good job
>>>> showing how to use a reduce over the map. That method will call
>>>> "replaceAll" once per entry in the map, which is probably fine if you
>>>> don't have many substitutions.
>>>>
>>>> Another way to do it is using clojure.string.replace, which has an
>>>> often-overlooked third overload which matches with a regex and
>>>> replaces with a "mapping function."
>>>>
>>>> Starting with a simple example:
>>>> user=>(require '[clojure.string :as s])
>>>> nil
>>>> user=>(s/replace "a b a" #"a|b" {"a" "1" "b" "2"})
>>>> "1 2 1"
>>>>
>>>> In the example, the map was being used as a "replacement function".
>>>>
>>>> ---
>>>> If you're willing to change your map to use strings as keys and
>>>> values, then the previous example is good enough.
>>>>
>>>> Otherwise, because you're wanting to use keywords as your keys, and
>>>> arbitratry values for your values, we'll need to use a slightly more
>>>> sophisticated replacement function.
>>>>
>>>> (defn key-pattern
>>>>     "Create a regex Pattern of the form '<key1>|<key2>', the key names
>>>> will be quoted in case they contain special regex characters"
>>>>     [m]
>>>>     (->> (keys m)
>>>>         (map #(java.util.regex.Pattern/**quote (name %)))
>>>>         (s/join "|")
>>>>         java.util.regex.Pattern/**compile))
>>>>
>>>> (defn replace-map [text m]
>>>>     (s/replace text
>>>>        (key-pattern m)
>>>>        (fn [field-name]
>>>>           (java.util.regex.Matcher/**quoteReplacement (str (get m
>>>> (keyword field-name)))))))
>>>>
>>>>  -- 
>>> -- 
>>> 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
>>> 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
>>> 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.
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>  
>>>  
>>>
>>
>>

-- 
-- 
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/groups/opt_out.


Reply via email to