You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Clojure中校验时某参数为nil即可通过的惯用实现方式是什么?

结论

你写的实现方案完全符合Clojure惯用规范,也刚好满足你的需求。

逻辑说明

你需求的核心是:当time2为nil时,interval-violation?返回假值,不触发错误添加逻辑。
Clojure中when语句在条件不成立时会返回nil,而nil在布尔上下文中等价于false,刚好匹配你的需求:

  • 当time1或time2任意为nil时,返回nil(假值),不添加错误,校验通过
  • 只有当两者都不为nil时,才计算时间差判断是否小于120秒,返回对应的布尔值

更简洁的惯用写法

你还可以用and的短路特性进一步简化代码,和你的实现逻辑完全等价,也是Clojure中这类判断的常用写法:

(defn interval-violation? [time1 time2]
  (and time1 time2 (< (calculate-time-diff time1 time2) 120)))

and会从左到右求值,只要任意一个表达式返回假值就立刻终止返回该假值,只有所有表达式都为真值时才返回最后一个表达式的结果,完美适配你需要先判空再计算的场景。

额外说明

这个写法同时也覆盖了time1可能为nil的边界情况,避免了time1为空时也触发calculate-time-diff的空指针异常,鲁棒性更强。

内容的提问来源于stack exchange,提问作者brenobarreto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:57:04