2011-07-14 51 views
10

所以我一直在研究Clojure教程,到目前爲止它非常有趣。不幸的是,每次關閉我的REPL時,我都會丟失前一個會話中創建的所有defndef如何將Clojure REPL的內容轉儲到文件中?

因此,爲了節省時間,是否有可能讓Clojure REPL保存我輸入到文件中的所有內容,以便我可以挖掘出我需要的未來用途?

+2

在很多Lisps中,這可以通過包含所有狀態的「保存圖像」來實現,例如, http://www.sbcl.org/manual/Saving-a-Core-Image.html,但據我所知,Clojure沒有這樣的設施。 –

回答

8

我認爲大多數人通過使用IDE將代碼片段發送到REPL而不是在REPL中進行大量的直接黑客工作。這樣您就可以更好地瞭解程序的當前狀態。

2

如果您使用的是類Unix操作系統,則可以使用rlwrap啓動REPL。這會讓你以簡單的方式訪問歷史命令的Ctrl-R,以及存儲歷史本身。

您只需要安裝rlwrap並將其前置到您啓動REPL的行,例如, rlwrap lein repl

1

小貼士:

  • 我做在REPL編碼的很多,但只要我寫的一些作品,然後我複製/粘貼到一個源文件。然後,只要我想讓REPL環境回到完全配置狀態,我就可以運行或重新加載該源文件。
  • 某些REPL(例如,我使用的Eclipse逆時針REPL)會保留以前會話的歷史記錄,因此您可以向上箭頭指向您想要重複的較早的REPL命令。
0

這實際上是一個比看起來更難的問題,因爲像這樣的轉儲必須考慮符號和變量依賴性,並以正確的符號順序輸出到文件。這就是說,由於代碼是數據,所以應該能夠編寫一個能夠實現這一點的函數。