2012-04-03 9 views
67

जब मैं जावास्क्रिप्ट में प्रोग्राम करता हूं, तो मुझे लगता है कि यह अत्यंत किसी भी बिंदु पर प्रोग्राम निष्पादन को रोकने के लिए डीबगर का उपयोग करने में सक्षम होने के लिए सुविधाजनक है और कमांड चलाने और वहां से चर का निरीक्षण करने में सक्षम होने के लिए सुविधाजनक है।एक अपूर्ण कार्य के अंदर परिभाषित आंतरिक कार्यों के परीक्षण और बातचीत करने का सबसे अच्छा तरीका क्या है?

अब, हास्केल में वापस, इंटरैक्टिव जीएचसीआई आरईपीएल में मनमानी कार्यों को चलाने का कोई तरीका है या क्या मैं अपूर्ण पर घोषित चीजों तक ही सीमित हूं?

आंतरिक कार्यों और मूल्यों को काम करने और डिबग करने के लिए "मानक" दृष्टिकोण क्या है?

उत्तर

85

जब आप जीएचसीआई में ब्रेकपॉइंट पर रुक जाते हैं, तो आप किसी भी चीज में पहुंच सकते हैं।

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 इस बिंदु पर अभी तक दायरे में नहीं है, इसलिए हम कदम है एक बार:

0,123,516:

[/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 
+0

क्या जीएचसीआई में परिभाषित कार्यों के साथ कुछ ऐसा किया जा सकता है? – haskelline

+2

@brence: आप इंटरैक्टिव रूप से परिभाषित कार्यों पर ब्रेकपॉइंट्स सेट नहीं कर सकते हैं। तो नहीं, मुझे ऐसा नहीं लगता है। – hammar

+0

आह, एक lifesaver जवाब, बहुत बहुत धन्यवाद! –

संबंधित मुद्दे

 संबंधित मुद्दे