67
當我使用Javascript進行編程時,我發現它非常方便,能夠使用調試器在任何時候停止程序執行,並且能夠運行命令並從那裏檢查變量。測試頂層函數內部函數並與其進行交互的最佳方式是什麼?
現在回到Haskell,有沒有辦法在交互式GHCI REPL中運行任意函數,還是我僅限於在頂層聲明的東西?
什麼是工作和調試內部函數和值的「標準」方法?
當我使用Javascript進行編程時,我發現它非常方便,能夠使用調試器在任何時候停止程序執行,並且能夠運行命令並從那裏檢查變量。測試頂層函數內部函數並與其進行交互的最佳方式是什麼?
現在回到Haskell,有沒有辦法在交互式GHCI REPL中運行任意函數,還是我僅限於在頂層聲明的東西?
什麼是工作和調試內部函數和值的「標準」方法?
當您在GHCi的某個斷點處停下時,您可以訪問範圍內的任何內容。比方說,你有這樣的功能:
foo :: Int -> Int
foo x = g (x + 2)
where g y = x^y
您可以在foo
設置斷點,並嘗試調用它:
> :break foo
Breakpoint 1 activated at /tmp/Foo.hs:(2,1)-(3,17)
> foo 42
Stopped at /tmp/Foo.hs:(2,1)-(3,17)
_result :: Int = _
g
不在範圍內還沒有在這一點上,所以我們必須步驟一次:現在
[/tmp/Foo.hs:(2,1)-(3,17)] > :step
Stopped at /tmp/Foo.hs:2:9-17
_result :: Int = _
g :: Integral b => b -> Int = _
x :: Int = 42
是g
在範圍上,我們可以使用它像任何頂級功能:
[/tmp/Foo.hs:2:9-17] > g 2
1764
[/tmp/Foo.hs:2:9-17] > g 3
74088
可以用GHCi中定義的函數做類似的事情嗎? – haskelline 2012-04-04 11:56:10
@brence:您不能在交互定義的函數上設置斷點。所以不,我不這麼認爲。 – hammar 2012-04-04 17:17:41
啊,救生員的答案,非常感謝! – 2013-10-03 20:30:30