8

パスとコールバックを呼び出している 2 つのバインディングがあります。

私がやろうとしているのは、最初の空でないものを返すことです。JavaScript では、次のようになります。

var final = path || callback || "";

clojureでこれを行うにはどうすればよいですか?

「some」関数を見ていましたが、compjure.string/blank チェックを組み合わせる方法がわかりません。私は現在これをテストとして持っていますが、うまくいきません。この場合、 nil を返す必要があると思います。

(some (clojure.string/blank?) ["1" "2" "3"])

この場合、2 を返す必要があります。

(some (clojure.string/blank?) ["" "2" "3"])
4

5 に答える 5

9
(first (filter (complement clojure.string/blank?) ["" "a" "b"]))

編集:コメントで指摘されているように、次の(filter (complement p) ...)ように書き換えることができます(remove p ...)

(first (remove clojure.string/blank? ["" "a" "b"]))
于 2013-09-06T19:07:23.443 に答える
3

nil および/または false で表される「空の値」を持っていることが幸運な場合は、次を使用できます。

(or nil false "2" "3")

どちらが返されますか"2"

JavaScript の例に相当するものは次のとおりです。

(let [final (or path callback "")]
  (println final))
于 2014-02-24T10:38:09.600 に答える
1

あなたが何を望んでいるのかを正確に伝えるのは私には難しかったので、これはあなたが何をしようとしているかについての私の理解です.

私の場合、あるレポートの項目が 2 番目のレポートで欠落しているかどうかを確認したかったのです。一致した場合は nil が返され、不一致の場合は一致しなかった実際の項目が返されました。

次の関数は、マップされた値の値をキーと比較します。

のようなものを使用することfind-firstは、おそらくあなたがやりたいことです。

(defn find-first 
  "This is a helper function that uses filter, a comparision value, and
   stops comparing once the first match is found. The actual match
   is returned, and nil is returned if comparision value is not matched."
  [pred col]
  (first (filter pred col)))

(defn str-cmp
 "Takes two strings and compares them. Returns 0 if a match; and nil if not."
 [str-1 str-2 cmp-start-pos substr-len]

 (let [computed-str-len (ret-lowest-str-len str-1 str-2 substr-len)
  rc-1 (subs str-1 cmp-start-pos computed-str-len)
  rc-2 (subs str-2 cmp-start-pos computed-str-len)]

  (if (= 0 (compare rc-1 rc-2))
   0
   nil)))

(defn cmp-one-val
"Return nil if first key match found, 
 else the original comparision row is returned.
 cmp-row is a single sequence of data from a map. i
 cmp-key is the key to extract the comparision value.
 cmp-seq-vals contain a sequence derived from 
 one key in a sequence of maps.
 cmp-start and substr-len are start and stop 
 comparision indicies for str-cmp."

 [cmp-row cmp-key cmp-seq-vals cmp-start substr-len]
 (if (find-first #(str-cmp (cmp-key cmp-row) %1 cmp-start substr-len) cmp-seq-vals)
  nil
  cmp-row))
于 2013-09-06T18:52:28.373 に答える