当前位置:  开发笔记 > 编程语言 > 正文

如何编写clojure条件语句

如何解决《如何编写clojure条件语句》经验,为你挑选了1个好方法。

如何翻译以下代码?

while ((readInteger = fileInputStream.read()) != -1) {
.....
}

在clojure?我需要在代码的其他部分中使用readInteger的值,但是'!= -1'需要在while条件内进行.



1> Arthur Ulfel..:

一些用于使事物适应Clojure语法的一般模式

    移动(到函数或操作符的左侧.

    将操作员移动到他们工作的东西的左边并围绕着 ( )

所以你可以这样开始:

(while (not= (.read fileInputStream) -1 ... and so on.

然后,因为您需要readInteger在代码中稍后使用该值,所以我们将讨论命名值和循环.如果您只想读取一次值并为其命名,则可以这样做:

(let [readInteger  (.read fileInputStream)]
  ... your code here)

既然你想在循环中完成它,那么让我们使用loop而不是let:

(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 ...)

用于生成结果序列,而不是像在其他语言中那样循环.

然后,clojuring的下一步是考虑如何分割读取数据来处理它.我们可以:

    制作所有数据的序列

    处理每个数据

这样的事情:

(let [data (line-seq fileInputStream)]
  (map #(Integer/parseInt %) data)
  ...)

标准库中有一些函数可以将很多东西转换成序列,还有一些函数可以用序列来完成很多事情.

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有