tim*_*mbo 4 clojure clojure-core
我有一个令牌扫描器,它只是返回nil我不感兴趣的字符。conj我不想将它们添加到我的令牌向量中,然后将它们全部删除,而是简单地不添加它们。
我在用着
;; dont conjoin if value false
(defn condj [v val]
(cond-> v, val (conj val)))
Run Code Online (Sandbox Code Playgroud)
去做这个。是否有特定的运算符或更简洁的实现?
我相信您可以为此使用传感器。此处对其进行了解释。我们的约简函数是conj,我们构建了一个转换器(remove nil?),将该函数转换为将忽略的函数nil:
(def condj ((remove nil?) conj))
Run Code Online (Sandbox Code Playgroud)
请注意, 与remove是相反的filter。我们还可以condj使用(filter some?), some?来实现 是一个对任何值都成立的函数,除了nil:
(def condj ((filter some?) conj))
Run Code Online (Sandbox Code Playgroud)
这似乎有效:
user=> (condj [3 4 5] 9)
[3 4 5 9]
user=> (condj [3 4 5] nil)
[3 4 5]
user=> (condj [3 4 5] false)
[3 4 5 false]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1477 次 |
| 最近记录: |