हाल ही में कई टाइमस्पैन के साथ काम कर रहे थे, और & औसत प्राप्त करने की आवश्यकता है।
हालांकि, टाइमस्पेन न तो ऑपरेटर get_Zero और न ही DivideByInt को परिभाषित करता है, इसलिए Seq.sum और Seq.average का उपयोग सीधे इस प्रकार से नहीं किया जा सकता है।मौजूदा प्रकारों को Seq.sum, आदि के साथ काम करने के लिए बढ़ाया जा सकता है?
open System
type System.TimeSpan
with
static member Zero with get() = TimeSpan()
static member (/) (n:DateTime, d:int) = DateTime(n.Ticks/(int64) d)
let ts = [ TimeSpan(10L); TimeSpan(99L) ]
let sum = ts |> Seq.sum
let avg = ts |> Seq.average
- त्रुटि:: प्रकार 'TimeSpan' 'get_Zero'
- त्रुटि नामित किसी भी ऑपरेटरों का समर्थन नहीं करता: प्रकार 'TimeSpan' 'DivideByInt' नाम किसी भी ऑपरेटरों का समर्थन नहीं करता निम्नलिखित संकलन करने में विफल रहता है
- चेतावनी: एक्सटेंशन सदस्य ऑपरेटर ओवरलोड प्रदान नहीं कर सकते हैं। इसके बजाय ऑपरेटर को टाइप परिभाषा के हिस्से के रूप में परिभाषित करने पर विचार करें।
क्या कुछ एफ # जादू है जो इन ऑपरेटरों को मौजूदा प्रकार पर परिभाषित कर सकते हैं?
मुझे पता है कि निम्नलिखित काम करेंगे (और बूट करने के लिए और अधिक कुशल होना चाहिए), लेकिन मैं अभी भी ऊपर के बारे में उत्सुक हूं इसलिए मैं इसे अन्य प्रकार के उपयोग के लिए अपने टूलबॉक्स में जोड़ सकता हूं।
let sum = TimeSpan(ts |> Seq.sumBy (fun t -> t.Ticks))
let avg = TimeSpan(let len = ts |> Seq.length in sum.Ticks/int64 len)
'सिस्टम। टाइमस्पेन' मुहरबंद है ताकि आप इससे प्राप्त नहीं कर सकें। – gradbot