在Clojure nil?
檢查爲零。如何檢查不是零?Clojure不爲零檢查
我想做的Clojure等同於Java代碼的:
if (value1==null && value2!=null) {
}
後續:我希望的是不爲零檢查與not
包裹它代替。 if
有一個if-not
副本。有沒有這樣的nil?
對應?
在Clojure nil?
檢查爲零。如何檢查不是零?Clojure不爲零檢查
我想做的Clojure等同於Java代碼的:
if (value1==null && value2!=null) {
}
後續:我希望的是不爲零檢查與not
包裹它代替。 if
有一個if-not
副本。有沒有這樣的nil?
對應?
另一種方式來定義not-nil?
將使用complement
功能,它只是反轉布爾函數的truthyness:
(def not-nil? (complement nil?))
如果你有幾個要檢查的值,然後使用not-any?
:
user> (not-any? nil? [true 1 '()])
true
user> (not-any? nil? [true 1 nil])
false
@應當選擇mikera的答案作爲正確答案。 – wegry 2015-10-18 19:39:03
條件:(and (nil? value1) (not (nil? value2)))
如果條件:(if (and (nil? value1) (not (nil? value2))) 'something)
編輯: 查爾斯·達菲爲not-nil?
正確的自定義的定義:
你想要一個不爲零?容易實現:
(def not-nil? (comp not nil?))
如果你不感興趣,從區分false
0,你可以使用該值作爲條件:
(if value1
"value1 is neither nil nor false"
"value1 is nil or false")
如果你想有一個not-nil?
功能,那麼我建議只是將其定義如下:
(defn not-nil?
(^boolean [x]
(not (nil? x)))
說了,這是值得這種用法比較明顯的替代:
(not (nil? x))
(not-nil? x)
我不知道,引入一個額外的非標準功能是值得保存兩個字符/一級嵌套。如果你想在高階函數中使用它,這將是有意義的。
在Clojure中,對於條件表達式而言,零無效。
因此(not x)
的作品在大多數情況下實際上與(nil? x)
完全一樣(布爾值爲false除外)。例如
(not "foostring")
=> false
(not nil)
=> true
(not false) ;; false is the only non-nil value that will return true
=> true
因此,要回答你原來的問題,你可以這樣做:
(if (and value1 (not value2))
...
...)
這不正是完全相反嗎? (不是「foostring」)=> false與我期望的(not-nil?「foostring」)相反,我也希望(not-nil?nil)返回false不正確。 – mikkom 2013-12-03 18:57:01
您可以嘗試 when-not:
user> (when-not nil (println "hello world"))
=>hello world
=>nil
user> (when-not false (println "hello world"))
=>hello world
=>nil
user> (when-not true (println "hello world"))
=>nil
user> (def value1 nil)
user> (def value2 "somevalue")
user> (when-not value1 (if value2 (println "hello world")))
=>hello world
=>nil
user> (when-not value2 (if value1 (println "hello world")))
=>nil
如果你想給false
當你的測試返回true
,然後你需要這裏的其他答案之一。但是,如果只是想測試一次,只要它通過nil
或false
以外的其他值,就可以使用identity
。例如,爲了從序列剝離nil
S(或false
多個):
(filter identity [1 2 nil 3 nil 4 false 5 6])
=> (1 2 3 4 5 6)
的Clojure 1.6後,可以使用some?
:
(some? :foo) => true
(some? nil) => false
這是有用的,例如,作爲謂詞:
(filter some? [1 nil 2]) => (1 2)
你想要一個非零?輕鬆完成:'(def not-nil?(comp not nil?))' – 2012-08-07 21:39:33
您應該接受[liwp's answer](http://stackoverflow.com/a/24043448/405550)。從谷歌到這裏的很多人不會滾動過去接受的答案,以發現「零?」的對面是「某?」 – Zaz 2016-07-29 04:56:50