由于调用Java易如反掌,Clojure仅仅提供了一个用于处理I/O操作的非常小的函数集合,但是clojure.java.io库中的这些函数使得调用Java中那些处理I/O的类变得更加方便。
Clojure中预定义了几个特殊形式的全局绑定变量*in*, *out* 和 *err*,分别对应于标准输入、输出和错误处理 。【(flush)】等价于【(.flush *out*)】,将输出缓冲中的内容刷到标注输出流*out*中。当然这些绑定变量都是可以改变的,比如向如下所示你可以把输出重定向到 "my.log
"文件里面去:
(binding [*out* (java.io.FileWriter. "my.log")]
...
(println "This goes to the file my.log.")
...
(flush))
print函数能够将代表任意数量对象的字符串打印到特殊形式*out*所代表流中,这些对象用空格隔开 (print obj1 obj2),打印结果也将用单个空格隔开,要忽略这些空格可以写成这种形式(print str(obj1 obj2))。
println函数在输出换行符号时默认将缓冲刷入*out*中,但可以将*flush-on-newline*全局变量为false改变这一行为。
(let [obj1 "foo"
obj2 {:letter \a :number (Math/PI)}] ; a map
(println "Output from print:")
(print obj1 obj2)
(println "Output from println:")
(println obj1 obj2)
(println "Output from pr:")
(pr obj1 obj2)
(println "Output from prn:")
(prn obj1 obj2))
Output from print:
foo {:letter a, :number 3.141592653589793}Output from println:
foo {:letter a, :number 3.141592653589793}
Output from pr:
"foo" {:letter \a, :number 3.141592653589793}Output from prn:
"foo" {:letter \a, :number 3.141592653589793}
(use '[clojure.java.io :only (reader)])
(defn print-if-contains [line word]
(when (.contains line word) (println line)))
(let [file "story.txt"
word "fur"]
; will print fur
; with-open will close the reader after
; evaluating all the expressions in its body.
(with-open [rdr (reader file)]
(doseq [line (line-seq rdr)] (print-if-contains line word))))
#'user/print-if-contains
word "fur"]
; will print fur
nil
分享到:
相关推荐
在 Clojure 中实现 IO monad 的实验。 为什么 Haskell 应该拥有所有的乐趣(功能纯度)? 要深入解释这样做的动机和过程,请查看 为什么使用这个? 您可能不想将其用于任何赚钱目的,但写起来很有趣,并且希望对...
翻译进度模块进度译者clojure.core进行中 , ,clojure.data无 clojure.inspector无 clojure.java.browse已完成clojure.java.io已完成clojure.java.javadoc已完成clojure.java.shell已完成clojure.main无 clojure....
依赖: [me.moocar/java.io " 0.1.0 " ]用法是 JDK7 中引入的文件路径的抽象。 这个库提供了和 Paths 之间的兼容性。 下面的示例用法( require 'me.moocar.java.io)( require '[clojure.java.io :as jio])( import ...
另一种Craft.io:使用试剂在Clojure中进行多人Starcraft游戏克隆
宁静的Clojure 一个用 Clojure 编写的 RESTful 购物清单应用程序后端示例,伴随着 kendru.github.io 上的教程系列
fs, 面向Clojure的文件系统实用程序 - 用于Clojure的文件系统实用程序 API文档这个库定义了一些用于在Clojure中处理文件系统的工具。 通常,它希望填补 clojure.java.io 留下的空白并添加( 美化) 所提供的java.io....
银行家Clojure中的货币和货币处理 Clojure库可在具有加密货币和其他非标准令牌支持的货币单位上运行。特征纯Clojure实现。 多态界面(注册的货币可以表示为货币记录,数字,字符串或关键字)。 支持的操作:计算,...
这是nginx-clojure.github.io网站的源存储库
该库定义了一些用于在Clojure中处理文件系统的实用程序。 通常,它想填补clojure.java.io留下的空白,并添加(整理) java.io.File提供的内容。 注意:此库处于维护模式。 如果您使用的是JDK8或更高,请考虑使用...
在本研讨会中,我们采用了一种实践方法,每个人都可以使用Clojure代码,并使用REPL(交互式运行时环境)对其进行实验。 通过在REPL中评估,破坏,修复和扩展代码,您将很快对Clojure有所了解,同时始终获得有关您...
Nginx-Clojure 是一个 Nginx 模块,用于嵌入 Clojure 或 Java 或 Groovy 程序,通常是那些基于 Ring 的处理程序。 查看 http://nginx-clojure.github.io 了解更多详情
Aleph将来自网络的数据显示为流,可以将其轻松转换为java.io.InputStream , 通道,Clojure序列或。 它公开了HTTP,TCP和UDP的简单默认包装器,但允许访问底层库的全部性能和灵活性。 [aleph " 0.4.6 " ] HTTP ...
[cljs-node-io "1.1.2"]cljs-node-io {:mvn/version "1.1.2"} 这是clojure.java.io到clojurescript的端口,对nodejs来说是有意义的。 目的是使Clojure程序员感到宾至如归,因此大多数事物都具有与jvm相同的签名和...
一组Clojure库,用于与Clojure应用程序中的Kubernetes进行交互。 由核心的Kubernetes客户端+提供更高级别构造的各种模块(有时具有附加的依赖性)组成。 为什么 一些Clojure Kubernetes库已经存在,但是并不全面。 ...
一个实现java.io.Closeable Clojure映射。 安装 TL; DR示例 ; ; in your project ( defn start " Return an running context with stateful references which can be closed. " [config] ( assoc config :server...
Segment.io Java API的惯用Clojure包装器。 有关更多信息,请参见。 ##工件 人工制品被 。 如果您使用的是Maven,请将以下存储库定义添加到pom.xml : < id>clojars.org < url>...
将clojure.java.io的输入流,输出流和复制功能扩展到java.nio类。 定义新的强制功能缓冲区,字节缓冲区,字符缓冲区,双缓冲区,浮点缓冲区,整数缓冲区,长缓冲区,短缓冲区,通道,可读通道和可写通道。 这些功能...
sql-短语手册Clojure库提供与Perl的类似的功能。 该库提供了一种方便的机制,用于在外部字典中查找查询并从Clojure...) 该文件是使用clojure.java.io/resource加载的,因此可以驻留在类路径中的任何位置。 有了这个:
promesa, 面向Clojure的promise库( 脚本) promesaClojure(Script)的promise库。 文档:http://funcool.github.io/promesa/latest/