gpt4 book ai didi

clojure - 使用 "rest"时保持序列的头部

转载 作者:行者123 更新时间:2023-12-01 10:05:47 26 4
gpt4 key购买 nike

我正在解析一个大的 csv 文件,我使用它的第一行作为记录的键。所以对于像这样的 csv 文件:

header1,header2
foo,bar
zoo,zip

我最终得到了一个像这样的惰性序列:

({:header1 "foo" :header2 "bar"},
{:header1 "zoo" :header2 "zip"})

代码工作正常,但我不确定在下面的函数中我是否拿着“线”的头。

(defn csv-as-seq [file]
(let [rdr (clojure.java.io/reader file)]
(let [lines (line-seq rdr)
headers (parse-headers (first lines))]
(map (row-mapper headers) (rest lines)))))

有人可以澄清一下吗?

最佳答案

是的,这个表达式在句法上是说要抱头

(let [lines (line-seq rdr)

虽然在这种情况下你应该逃避它,因为它们没有引用linesheaders 在调用 map 之后,从 1.2.x 开始的 Clojure 编译器包含一个称为 locals clearing 的功能:它设置任何局部变量不在函数调用的序言中对 nil 的函数调用之后使用。在这种情况下,它将在函数的本地上下文中将行和标题设置为 nil,并且它们将在使用时被 GCd。这是 clojure 生成无法用 java 表达的字节码的罕见情况之一。

关于clojure - 使用 "rest"时保持序列的头部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10902296/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com