如何翻译以下代码
while ((readInteger = fileInputStream.read()) != -1) {
.....
}
在 clojure 中?我需要在代码的其他部分使用 readInteger 的值,但 '!= -1' 也需要在 while 条件中发生。
最佳答案
一些使事物适应 Clojure 语法的通用模式
(
在函数或运算符的左侧。 ( )
包围起来所以你可以这样开始:
(while (not= (.read fileInputStream) -1 ... and so on.
那么,由于您需要使用
readInteger
value 稍后在代码中让我们讨论命名值和循环。如果您只想读取一次值并为其命名,您可以这样做:(let [readInteger (.read fileInputStream)]
... your code here)
既然要循环执行,那我们就用
loop
而不是让:(loop [readInteger (.read fileInputStream)]
... your code here
(if (not= readInteger -1)
(recur (.read fileInputStream))))
或
for
(这不是其他语言的“for 循环”)(for [readInteger (repeatedly #(.read fileInputStream))
:while (not= readInteger -1)]
... do somethign with readInteger ...)
For 生成结果序列,而不是像在其他语言中那样循环。
然后Clojuring的下一步是考虑如何将读取数据与处理数据分开。我们可以:
像这样:
(let [data (line-seq fileInputStream)]
(map #(Integer/parseInt %) data)
...)
标准库中有一些函数可以将很多东西转换成序列,还有一堆函数可以用序列做很多事情。
关于clojure - 如何编写clojure条件语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41862089/