在这种情况下,我可能会将search
的nil
值视为在filter
调用中“始终匹配”。
(filter (fn [comment] (or (nil? search)
(s/includes? (s/upper-case (:thread comment))
(s/upper-case search))))
comments)
然后您可以直接让0个参数版本的函数调用1个参数版本的函数,并传递nil
。
(defn get-threads
"Get all urls threads"
([] (get-threads nil))
([search]
(let [comments ...]
(filter ... comments))))
这里的另一个选项是使用cond->>
。
(cond->> (distinct (map (fn [comment] ...) @db))
search
(filter (fn [comment] (s/includes? ...)))
这将只有当search
非nil时,将注释传递给filter
调用,否则将返回所有未过滤的注释。
通常,如果由于可选参数而具有多个参数,我会选择一个“空”值来填充可选参数,并让较低阶的参数调用完整阶的参数,传递这些“空”值(如零、nil
、空列表等)。然后完整阶版将根据需要条件性地处理这些“空”值。