2013-08-23 73 views
0

我在clojure中創建字符串時遇到問題,我需要根據字符串變量之一 - 書的長度插入一系列空格。在clojure中創建可變數量的空格字符串

(defn blanks [book] 
    (let [ x(count book)] 
    (cond 
      (= "4" x) " " 
      (= "5" x) "  " 
      (= "6" x) "  " 
))) 

(defn Key1 [x date book bookid] 
    (cond 
      (= "AB.LN.TUV" x) (str date".     AB.LN. TUV. JKL.  FOO.   FOO. GRAVITY.  "book".book."(str (blanks book)) bookid) 
      (= "DEF.NY.ZXY" x) (str date". DEF.NY. ZXY. JKL.  .   .QPR.    "book". POS.  "book"."bookid) 
      (= "DEF.LN.TUV" x) (str date".    DEF.LN. TUV. JKL.  FOO.   FOO. GRAVITY.  "book".book."blanks bookid) 
)) 



(defn ShowSelectedParams [& props] 
    (let [ 
       entity "AB.LN.TUV" 


       book "ABCD" 
       date "21030823" 
       bookid "1234abcd" 
       ] 

       (Key1 entity date book bookid) 
)) 

但是這將返回以下,不帶空格:

「。。。21030823. AB.LN. TUV JKL FOO FOO重力ABCD book.1234abcd

我想的是:

「TUV 21030823. AB.LN. JKL FOO FOO重力ABCD * 強大的文本 *書1234ABCD。。。。。」

有任何幫助,這非常讚賞

+1

沒關係,剛纔意識到我有cond檢查字符串不是數字! DOH !!如果有人知道更多clojuresqu做這個的方式,雖然我會非常感興趣.. – redhands

回答

1

這是企圖使更多的慣用

我申請一個更標準的Clojure風格的格式,基於計數,而不是產生的空格數硬編碼字符串,並用case語句替換重複的相等性檢查。

(defn blanks 
    [book] 
    (apply str (repeat (count book) \space))) 


(defn Key1 
    [x date book bookid] 
    (case x 
    "AB.LN.TUV" (str date 
        ".AB.LN.TUV.JKL.FOO.FOO.GRAVITY." 
        book ".book." 
        (blanks book) 
        bookid) 
    "DEF.NY.ZXY" (str date 
         ".DEF.NY.ZXY.JKL...QPR." 
         book 
         ".POS." 
         book 
         "." 
         bookid) 
    "DEF.LN.TUV" (str date 
         ".DEF.LN.TUV.JKL.FOO.FOO.GRAVITY." 
         book 
         ".book." 
         blanks 
         bookid))) 

(defn ShowSelectedParams 
    [& props] 
    (let [entity "AB.LN.TUV" 
     book "ABCD" 
     date "21030823" 
     bookid "1234abcd"] 
    (Key1 entity date book bookid))) 
+0

我認爲這仍然是不正確的,例如把函數空白放在第三種情況的結果字符串中可能是一個錯誤。 – noisesmith

+0

沒有這個工作,謝謝,看起來好多了! – redhands

相關問題