我正在使用condp表单并在其文档中注意到:
如果未提供默认表达式且没有子句匹配,则抛出IllegalArgumentException。
我不需要处理不匹配也不想用try表单包围condp。我想把占位符放在那里。什么是最快最简单的Clojure占位符表单?
编辑:
感谢大家的意见,非常有帮助!这种行为的用例是在用户触发的强制数据恢复任务中,我的应用程序需要动态解析Clojure代码以从日志文件中恢复数据。损坏的数据(不匹配)应被忽略,如果用cond写入,则相同的形式将比condp采用更多的击键。
答案 0 :(得分:4)
如果您不需要处理不匹配(即您可以保证始终匹配),那么您不需要将任何内容作为占位符。
如果你认为总会有匹配的假设是错误的那么你会得到一个IllegalArgumentException - 但这是好事,因为它会立即告诉你你有一个逻辑错误在你的代码中。这是行动中的好fail-fast principle
答案 1 :(得分:2)
你可以说:
(condp = option
:foo 1
:bar 2
3)
答案 2 :(得分:1)
简答:使用nil
。
但是你不需要默认值的原因是你确定至少有一个谓词会存在,对吧?这并不是说你依赖副作用,对吗?