函数式编程中的条件"赋值"

m33*_*lky 1 lisp functional-programming clojure

我编写的东西没有副作用,但我的代码不是很易读.考虑以下代码:

(let [csv_data (if header_row (cons header_row data_rows) data_rows)]
)
Run Code Online (Sandbox Code Playgroud)

我正在尝试csv_data在一段代码中使用.什么是干净的调理方式header_row?我看过了if-let,但看不出这对我们有什么帮助.

我遇到了类似于函数for循环的情况,我将结果绑定到局部变量,代码看起来像一堆表达式.

在很多情况下,我真的必须创建一个单独的辅助函数吗?我在这里错过了什么?

Leo*_*hin 6

使用cond->>

(let [csv_data (cond->> data_rows
                 header_row (cons header-row)]
   )
Run Code Online (Sandbox Code Playgroud)

它的工作方式与常规->>宏类似,但在每个线程形式之前,必须放置一个测试表达式来确定是否使用线程化表单.

还有cond->.在这里阅读有关线程宏的更多信息:官方线程宏指南