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.