我今天发现了这个Clojure问题:
(condp contains? some-set
"foo" "foo's in thar"
"bar" "bar's in thar"
"t'aint thar")
这个想法是返回第一个匹配项下的字符串,其中
some-set
包含一个值。如果集合中都没有值,则返回最后一个值。问题是,contains?
函数首先获取集合,然后 key ,而condp
首先需要 key 。我通过编写一个函数来“修复”它:
(defn reverse-params [f] (fn [a b] (f b a))
并调用它:
(condp (reverse-params contains?) some-set
"foo" "foo's in thar"
"bar" "bar's in thar"
"t'aint thar")
哪个可行,但是我的问题是我是否缺少一些更好的方法(也许通过使用
some
)?我可以使用cond
,但我认为这种方式可以节省一些输入时间。 最佳答案
不,您没有丢失任何东西。这是正常的解决方法。
如果只使用一次,我经常为此使用匿名函数。
(condp #(contains? %2 %1) some-set
"foo" "foo's in thar"
"bar" "bar's in thar"
"t'aint thar")
当使用
->
和->>
宏对事物进行线程化时,也会出现此问题。在这种情况下,我经常使用as->
宏为线程值命名