3

我正在使用 condp 表单并在其文档中注意到:

如果没有提供默认表达式并且没有子句匹配,则抛出 IllegalArgumentException。

我不需要处理不匹配也不想用 try 形式包围 condp。我正在考虑在那里放置一个占位符。什么是最快和最简单的 Clojure 占位符形式?

编辑:

谢谢大家的意见,很有帮助!此行为的用例是在用户触发的强制数据恢复任务中,我的应用程序需要动态解析 Clojure 代码以从日志文件中恢复数据。损坏的数据(不匹配)应被忽略,如果用 cond 写入相同的形式,则比 condp 需要更多的击键次数。

4

3 回答 3

4

如果您不需要处理不匹配(即您可以保证总会有匹配),那么您不需要在其中放置任何内容作为占位符。

如果您认为总会有匹配项的假设被证明是错误的,那么您将收到 IllegalArgumentException - 但这是一件好事,因为它会立即告诉您代码中存在逻辑错误。这是古老的快速失败原则在行动中

于 2012-07-28T14:36:38.223 回答
2

你可以说:

(condp = option
  :foo 1
  :bar 2
  3)
于 2012-07-28T10:47:19.390 回答
1

简短回答:使用nil.

但是您不需要默认值的原因是您确定至少有一个谓词会成立,对吧?不是说你在依赖副作用,对吧?

于 2012-07-28T10:44:42.433 回答