我使用了condp表单,并在其文档中注意到:
如果没有提供默认表达式,也没有匹配子句,则会引发IllegalArgumentException。
我不需要处理不匹配,也不想用try形式包围condp。我正在考虑在那里放一个占位符。什么是最快、最简单的Clojure占位符表单?
编辑:
感谢大家的意见,非常有帮助!这种行为的用例是,在用户触发的强制数据恢复任务中,我的应用程序需要动态解析Clojure代码以从日志文件中恢复数据。损坏的数据(不匹配)应被忽略,如果用cond书写相同的形式,则需要比condp更多的笔划。
如果你不需要处理不匹配(即你可以保证总是有匹配),那么你就不需要把任何东西放在那里作为占位符。
如果你认为总是有匹配的假设被证明是错误的,那么你会得到一个IllegalArgumentException,但这是一件好事,因为它会立即告诉你代码中有逻辑错误。这是一个很好的老故障快速原则在行动
您可以说:
(condp = option
:foo 1
:bar 2
3)
简短回答:使用nil
。
但您不需要默认值的原因是,您确信至少有一个谓词会成立,对吧?这并不是说你依赖于副作用,对吧?