gpt4 book ai didi

variables - 是否可以修改 let 绑定(bind)?

转载 作者:行者123 更新时间:2023-12-03 08:07:54 24 4
gpt4 key购买 nike

我想了解如何更改在 Clojure 函数的 let 绑定(bind)中声明的变量的值。下面是我正在使用的代码。我希望该函数返回 java.lang.String 对象,该对象包含字符串中包含的文本。

(defn read-text-from-file
{:doc "fn read-text-from-file is used to output in \"string\"
format the text in a file."}
[#^String file-name]
(let [buff-reader (open-file-reader file-name)]
(loop [full-text "" line (.readLine buff-reader)]
(when line
(-> full-text (.concat line))
; (println full-text)
(recur (-> file-name (.concat line)) (.readLine buff-reader))))))

备注 :功能“打开文件阅读器”如下:
(defn open-file-reader
{:doc "This is used to open a file, ready for reading"}
[file-name]
(let [file-object (java.io.File. file-name)
buff-reader (-> file-object (java.io.FileReader.)
(java.io.BufferedReader.))]
buff-reader))

最佳答案

let 中的绑定(bind)是不可变的,不能反弹。即使您可以重新绑定(bind)它们,您的问题也存在于代码的其他地方。您需要做的是使用 if特殊形式而不是 when宏。与 if您可以返回 full-text line is null , 和 recur当它不是。

不过,我建议您查看 slurp 功能,它可以为你做这一切。

user=> (doc slurp)
-------------------------
clojure.core/slurp
([f & opts])
Opens a reader on f and reads all its contents, returning a string.
See clojure.java.io/reader for a complete list of supported arguments.
nil

如果你还想自己实现这个功能,我建议你至少做 full-text一个字符串生成器。然后你可以通过说 (str full-text) 将其转换为字符串。 ,当你最终归还它时。然而,Maurice Reeves 在 his answer 中提供了更惯用的 Clojure 解决方案。 .

关于variables - 是否可以修改 let 绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10657517/

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