1

假设我有一个文件供 n 个读者和 m 个作者使用。当我知道 n 和 m 的值时,假设 n==3 和 m==1,我可以编写如下代码:

(use 'clojure.java.io)
(with-open [rdr1 (Reader file)
            rdr2 (Reader file)
            rdr3 (Reader file)
            wtr1 (Writer file)]
    (time-to-work-out-guys))

现在的情况是,应用程序用户确定 n 和 m 的值,所以我不知道 n 和 m 会有什么值。有什么方法我仍然可以使用 with-open 来初始化读取器/写入器并完成这项工作?

4

1 回答 1

3

因为open-with是宏而不是函数,所以构建它的唯一方法是使用一个宏来生成对 open-with 的调用,然后在运行时使用 eval 来编译它。因此,虽然从技术上来说答案是肯定的,但我不能诚实地推荐这样做。open-with 是一种不适合所有情况的便利。

在这种情况下,编写自己的(try .... (finally ...))语句更有意义。

于 2013-08-23T23:30:32.153 回答