例如,
> (some #{nil} #{nil 1 2 3})
nil
> (some #{} #{nil 1 2 3})
nil
我知道我可以使用
(some nil? #{nil 1 2 3})
检查nil值。我现在想不出任何好的例子。
但一般来说,当返回nil时,如何确定nil是否表示找不到任何内容或者是否找到值nil?
答案 0 :(得分:4)
nil
只是一个值,其含义取决于上下文。
就像所有其他值一样:唯一需要注意的是它是falsy
,即在条件表达式中计为false
。
需要注意三个特殊情况:
nil
是用于表示空序列的返回值,例如在(seq [])
nil
通常用作返回值以表示false,例如在(or false nil)
nil
,例如在({:a 1} :b)
这些情况有时会引起歧义:如果是这样,那么你需要使用不同的功能。你的榜样很好:
(some #{nil} #{1 2 3})
=> nil
(失败 - 未找到结果)(some #{nil} #{nil 1 2 3})
=> nil
(成功 - 未找到结果!!!)在这种情况下,你只是选择了错误的功能:你不能使用集合#{nil}
来检测nils ....而你只能使用nil?
或甚至可以做某事喜欢#(get #{nil} % :not-found)
答案 1 :(得分:1)
这不是你问的问题,而不是Clojure特别提出的问题吗?
你可以问:
> (filter nil? #{nil 1 2 3})
> (nil)
告诉你集合中有一个零;你得到了你所要求的东西 - 你问了一个含糊不清的问题,并得到了一个适当的模糊回应。