2012-10-18 82 views
7

我想知道在模塊重新加載時是否可以保留ghci中的賦值?ghci:在模塊重新加載後保留範圍內的定義值

例如我在ghci中分配一個值:

ghci> let x = 1 

ghci> x <- getLine 

進入:r後重新加載現有模塊x不在範圍了。通常可以保留賦值,例如在Python解釋器中? (這真是太方便了......)

即使壽,實際上在ghci中每一行代表一個功能,那就是(monadically)結合到下一個,我還是想知道,如果保持這一狀態是可能的。

回答

4

我不知道有任何這樣做的方式。

麻煩的是,您可能會將某些變量綁定到特定類型的值,編輯源以刪除該類型,然後重新加載。現在你有一個不再存在的類型的變量。

不過,你會認爲它不應該太難檢測到,並且只丟棄那些沒有意義的變量。 (真正有趣的部分大概是當一個類型仍然存在,但現在有不同數量的字段,或類似的東西...)

+1

我不認爲ghci可以做到這一點,但它是完全可以做一個互動Haskell保留綁定。另外,沒有必要使用:reload命令。 – augustss

+0

嗡嗡聲取決於變量如何綁定到名稱空間。我剛剛開始使用python交互式解釋器,發現這個功能相當方便。如果你在模塊test中綁定一個變量'x = 3',那麼這個變量在'test.x'範圍內。如果在'test'中刪除'x',並重新加載模塊'test.x',但是例如先前定義的頂層變量'x'仍然在範圍內。 – JHannes