Clojure技术问询:如何条件调用函数并默认执行其余函数
条件执行函数的优化实现
你的需求是:当指定条件为真时执行somefunc、firstfunc、secondfunc三个函数;条件为假时仅执行后两个函数。当前代码已经能实现该逻辑,但可以优化得更简洁清晰。
优化后的代码
(defn- publish [txn publisher domain-slug template first-published-at] ; 条件满足时执行somefunc,否则跳过 (when (= 2 2) ; 替换成你的实际判断条件 (somefunc txn publisher)) ; 以下两个函数无论条件是否成立都会执行 (firstfunc txn publisher domain-slug first-published-at) (secondfunc txn publisher))
说明
when是Clojure里的语法糖,等价于(if 条件 (do 执行体)),比原代码的if+do写法更简洁,语义也更明确:仅当条件为真时执行后续表达式。- 函数内的表达式会按顺序依次执行,
firstfunc和secondfunc不受前面条件判断的影响,始终会被调用,完全符合你的需求。
如果希望把所有执行逻辑包裹在一个do块里(不影响功能,仅代码结构更规整),也可以写成:
(defn- publish [txn publisher domain-slug template first-published-at] (do (when (= 2 2) (somefunc txn publisher)) (firstfunc txn publisher domain-slug first-published-at) (secondfunc txn publisher)))
内容的提问来源于stack exchange,提问作者Bindiya H
相关产品推荐
相关产品推荐

