1
(defn GetValuesFromWhereCommand
    "return a list of values from Where command"
    [Query tableName]
    (let [values (re-seq #"[0-9a-zA-Z_=<>]+" ((re-find #"WHERE(.*)" Query) 1))
        bitwise (re-find #"AND|OR" Query)
        tempList (ref #{})
       ] 
   ; first loop will look for the operators  = < >
   (doseq [item values]
    (let [result (case (re-find #"[=><]" item)
        "=" (GetRowsfromCondition tableName item = )
        "<" (GetRowsfromCondition tableName item < )
        ">" (GetRowsfromCondition tableName item > )
        nil (println "nothing")
     )]
     (when (not= nil result) (dosync (alter tempList conj result)) )
    tempList)
   )
   (println tempList)
   tempList)     ; get the Where from Update ','
)

ここに私の出力があります。

#<Ref@5a4e229e: #{#<Ref@3fc2e163: #{0}> #<Ref@63280c85: #{0 1}>}>

#{0} を返す AND 演算と #{0 1} を返す OR 演算を実装したいと考えてい
ます。


私の問題は、作成したリストにアクセスする方法です。何らかの理由でユニオン/インターセクションを使用できませんでした。

4

1 に答える 1

3

すべての内部セットを deref し、新しいセットにユニオンを適用する必要があります。次のようになります。

(let [newList (ref #{})] (doseq [item @your_ref_to_set_of_refs] (dosync (alter newList conj @item))) (apply union @newList))
于 2013-02-23T14:55:40.933 に答える