मुझे उम्मीद है कि मेरे डीयू को अपेक्षित काम करने में समस्या हो रही है। मैं एक नया ड्यू जो या तो मैं नहीं समझ सकता क्यों यह मुझे एक "त्रुटि" बनाने की अनुमति है, तो प्रकार < 'एक> या किसी अपवाद System.Exceptionएफ # भेदभाव संघ प्रकार का अंक
सेopen System
// New exceptions.
type MyException(msg : string) = inherit Exception(msg)
type MyOtherException(msg : string) = inherit MyException(msg)
// DU to store result or an exception.
type TryResult<'a, 't> =
| Result of 'a
| Error of 't :> Exception
//This is fine.
let result = Result "Test"
// This works, doing it in 2 steps
let ex = new MyOtherException("Some Error")
let result2 = Error ex
// This doesn't work. Gives "Value Restriction" error.
let result3 = Error (new MyOtherException("Some Error"))
व्युत्पन्न का एक परिणाम है परिभाषित किया है मैं इसे 2 चरणों में करता हूं, लेकिन जब मैं एक ही पंक्ति पर एक ही चीज कर रहा हूं, तो मुझे वैल्यू प्रतिबंध त्रुटि मिलती है।
मुझे क्या याद आ रही है?
धन्यवाद
अद्यतन
, @kvb द्वारा पोस्ट को देखते हुए प्रकार की जानकारी हर बार मैं एक त्रुटि थोड़ा वर्बोज़ लग रहा था बनाने की जरूरत को जोड़ने, तो मैं इसे लिपटे एक अतिरिक्त विधि में जो एक त्रुटि बनाता है और थोड़ा और संक्षिप्त है।
// New function to return a Result
let asResult res : TryResult<_,Exception> = Result res
// New function to return an Error
let asError (err : Exception) : TryResult<unit,_> = Error(err)
// This works (as before)
let myResult = Result 100
// This also is fine..
let myResult2 = asResult 100
// Using 'asError' now works and doesn't require any explicit type information here.
let myError = asError (new MyException("Some Error"))
मुझे यकीन नहीं है कि 'इकाई' के साथ एक त्रुटि निर्दिष्ट करने से कोई परिणाम नहीं होगा जो मैंने अभी तक नहीं देखा है।
TryResult<unit,_> = Error(err)
धन्यवाद। यह समझ में आता है। मैंने अपना प्रश्न अपडेट किया है जिसमें अतिरिक्त त्रुटि निर्माण विधि शामिल है जो ठीक काम करने लगती है और इसे थोड़ा सा रखती है। केवल सवाल यह है कि इस प्रकार को अब TryResult के रूप में निर्दिष्ट किया गया है, यह सुनिश्चित नहीं है कि इसमें कोई डाउन-साइड होगा या नहीं। –
Moog