在地图中获取可能值之一的惯用法?

Ann*_*nan 7 clojure

获取地图中几个可能键的第一个非零值的最佳方法是什么.

例:

(get-first-matching {:fum 4 :bar 41 :baz 45} [:foo :bar :baz])
;=> 41
Run Code Online (Sandbox Code Playgroud)

Jon*_*nas 11

一些.

user=> (some {:fum 4 :bar 41 :baz 45} [:foo :bar :baz])
41
Run Code Online (Sandbox Code Playgroud)

  • 有趣的是,这里使用的地图是作为使用密钥集合调用的谓词函数.因此,您将得到的并不是严格意义上的第一个非零值,而是第一个"真实"值.试试`(某些{:foo nil:bar false:baz 20} [:foo:bar:baz])`例如. (8认同)
  • 是的,所以适用于nil或false值的版本看起来像`(when-let [[kv](some#(find m%)[:foo:bar:baz])] v)`. (7认同)