Clojure字符串/替换在我的函数中失败

时间:2013-02-19 23:32:57

标签: clojure

我想在我发送给谷歌的搜索查询中用加号替换空格字符。

(defn search-google [search-term]
  (clojure.string/replace search-term #" " "+")
    (browse-url 
      (str "http://google.ca/search?q=" search-term)))

但是我的功能失败,因为我的搜索词会保留空格。

(search-google "clojure user input")

URISyntaxException Illegal character in query at index 32:
http://google.ca/search?q=clojure user input  java.net.URI$Parser.fail (:-1)

我是clojure的新手,并怀疑我遗漏了一些明显的东西。

3 个答案:

答案 0 :(得分:3)

正在创建一个新的固定搜索词,然后忽略固定的搜索词,并将未更改的词传递给browse-url:

(def browse-url println)                                                                                                                                                  
(defn search-google [search-term]                                                                                                                                         
  (let [fixed-search-term (clojure.string/replace search-term #" " "+")]                                                                                                  
    (browse-url                                                                                                                                                           
     (str "http://google.ca/search?q=" fixed-search-term))))  

user> (search-google "a b c")                                                                                                                                             
http://google.ca/search?q=a+b+c                                                                                                                                           
nil    

答案 1 :(得分:2)

请改为尝试:

(defn search-google [search-term]
  (browse-url 
   (str "http://google.ca/search?q="
        (clojure.string/replace search-term #"\s+" "+"))))

请注意,模式是正则表达式,您可以使用\s+指示要替换的字符串匹配应包含一个或多个空格。

另请注意,replace过程会返回 new 字符串,原始字符串不会被修改。

答案 2 :(得分:1)

替换不会就地修改search-term,而是返回一个被丢弃的副本。

使用let将此值绑定到函数中的名称,然后使用该名称调用browse-url