常见模式是如果某个值不符合谓词,则会提供默认值。当值为而不是绑定到某个名称时,编写这种模式的好方法是什么?带谓词的Clojure默认值
目前我使用let表达式。例如,如果我想为空字符串的默认值我可能会写类似:
(let [value {:a "foo"}]
(if (:a value) value {:a "bar"}))
不过,我觉得这样就可以简化成更接近匹配falsy值相同proceduce。
(or value default)
我已经考虑创建一个函数,它是:
(defn or-default [pred value default]
(if (pred value) value default))
随着其上面的例子就变成:
(or-default :a {:a "foo"} {:a "bar"})
不过,我认为一定有人想过这个早些时候,那么是否有一个既定的方法?
我使用'(或默认值)'。 –
@ErwinRooijakkers @ErwinRooijakkers我的问题是为其他谓词,然后简单地truthy/falsy – user3792713
,这将是你需要的东西:'(或(和(pred值)的价值)默认)'如果你想避免使用'if' – leetwinski