Clojure – Docjure:方法在REPL中工作,但不在File中

我只是尝试在clojure中读取一个excel文件的内容。 我使用docjure库。 当我在REPL中使用示例代码时,输​​出就像我想要的那样。 但插入到文件后,我得到了一个错误的参数 – 错误的电子表格/select表方法。

这里是代码:

(use 'dk.ative.docjure.spreadsheet) (->> (load-workbook (str (System/getProperty "user.dir") "/resources/public/xls/test.xls") (select-sheet "menu") (select-columns {:A :number, :D :name}) )) 

这个方法的参数是[name ^Workbook workbook] 。 为什么在REPL中只需要一个参数,而在文件中只需要两个呢?

正如亚历克斯在评论中所说的,你与parens搞混了。

现在你的代码评估为:

 (load-workbook (str (System/getProperty "user.dir") "/resources/public/xls/test.xls") (select-sheet "menu") (select-columns {:A :number, :D :name})) 

这里是你的实际代码应该是这样的:

 (->> "/resources/public/xls/test.xls" (str (System/getProperty "user.dir")) ; prefix it with user.dir load-workbook ; load .xls workbook (select-sheet "menu") ; select menu sheet (select-columns {:A :number, :D :name})) ; select some columns 

其中评估为:

 (select-columns {:A :number, :D :name} (select-sheet "menu" (load-workbook (str (System/getProperty "user.dir") "/resources/public/xls/test.xls")))) 

正如你所看到的, select-sheetselect-columns在这里有两个参数。

为了更好地理解线程最后macros->>工作原理, 请参阅它的文档 。