2013-08-23 36 views
1

未知的讀者/作家說,我有一個文件由n個讀者和M作家使用。當我知道n和m的值,即如果n == 3,且m == 1,我可以寫這樣的代碼:與開放使用初始化Clojure中

(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會有什麼價值。有沒有辦法,我仍然可以打開用於初始化讀/寫器,並做這項工作什麼辦法?

回答

2

因爲open-with是一個宏而不是函數,所以構建這個的唯一方法是使用一個生成調用open-with的宏,然後使用eval在運行時編譯它。因此,儘管技術上答案是肯定的,我不能誠實推薦這樣做。開放式與是不適合所有情況下的方便。

在這種情況下,它更有意義,編寫自己的(try .... (finally ...))聲明。