Clojure函数 - 返回在最后一个语句之前计算的值

seb*_*ebi 4 functional-programming function clojure

我有一些用clojure编写的测试.这是一个简单的例子:

(defn test1
  []
  (start-server)
  (run-pvt-and-expect "PVT-0")
  (stop-server)
 )
Run Code Online (Sandbox Code Playgroud)

我想返回"run-pvt-and-expect"的结果,但我需要在它之后执行其他函数.我怎么能以功能的方式在clojure中做到这一点(不使用像"let"这样的结构)?谢谢.

注意:我阅读了这个问题及其答案,但无法将其应用于我的案例.此外,评论要求提供从未给出的示例,因此请将此视为一个示例......

sto*_*tal 7

您可以使用finally块执行此操作.

(try 
    (+ 2 3)
    (finally (+ 6 7)))
Run Code Online (Sandbox Code Playgroud)

产生5而不是13的结果.

这是相关的doc页面. 重要的部分是:

将评估任何最终exprs的副作用.

另一种选择是编写一个像with-open这样的宏来启动和停止服务器,同时返回正确的结果.虽然这只是将问题转移到如何编写宏,因为它需要使用let或上面的try finally构造.

  • try/finally是示例*的唯一正确解决方案*给定*:我敢打赌如果`run-pvt ...`抛出你仍然想要停止服务器. (3认同)