如何翻译以下代码?
while ((readInteger = fileInputStream.read()) != -1) {
.....
}
Run Code Online (Sandbox Code Playgroud)
在clojure?我需要在代码的其他部分中使用readInteger的值,但是'!= -1'需要在while条件内进行.
一些用于使事物适应Clojure语法的一般模式
(到函数或操作符的左侧.( )所以你可以这样开始:
(while (not= (.read fileInputStream) -1 ... and so on.
Run Code Online (Sandbox Code Playgroud)
然后,因为您需要readInteger在代码中稍后使用该值,所以我们将讨论命名值和循环.如果您只想读取一次值并为其命名,则可以这样做:
(let [readInteger (.read fileInputStream)]
... your code here)
Run Code Online (Sandbox Code Playgroud)
既然你想在循环中完成它,那么让我们使用loop而不是let:
(loop [readInteger (.read fileInputStream)]
... your code here
(if (not= readInteger -1)
(recur (.read fileInputStream))))
Run Code Online (Sandbox Code Playgroud)
或for(不是其他语言的"for循环")
(for [readInteger (repeatedly #(.read fileInputStream))
:while (not= readInteger -1)]
... do somethign with readInteger ...)
Run Code Online (Sandbox Code Playgroud)
用于生成结果序列,而不是像在其他语言中那样循环.
然后,clojuring的下一步是考虑如何分割读取数据来处理它.我们可以:
这样的事情:
(let [data (line-seq fileInputStream)]
(map #(Integer/parseInt %) data)
...)
Run Code Online (Sandbox Code Playgroud)
标准库中有一些函数可以将很多东西转换成序列,还有一些函数可以用序列来完成很多事情.