user=> (filter nil? [:a :b nil nil :a])
(nil nil)
我看到nil?
是一个谓词。
但是,我目前想将clojure.contrib.string/substring?
转换为谓词,这意味着,虽然substring
是一个接受两个参数的函数,但我想将第一个设置为固定。
我怎么能这样做?
目前我正在写这样的东西
(filter (fn [x] (clojure.contrib.string/substring? "todo" x))
["todo" "todo" nil "todos"])
有更好的方法吗?
答案 0 :(得分:7)
除了
,你的代码没问题 clojure.contrib.string
已被clojure.string
吸收,substring?
已不复存在。请参阅clojure.contrib migration。
您需要保护示例数据中的nil
。
如果您愿意,也可以使用#()
阅读器宏,例如使用正则表达式
(filter #(when % (re-find #"todo" %)) ["todo" "todo" nil "todos"])
或Java interop
(filter #(when % (.contains % "todo")) ["todo" "todo" nil "todos"])
两个
;=> ("todo" "todo" "todos")