2010-02-11 13 views

उत्तर

68

मैं एक ब्लॉग में यह पाया गया: "What does this C# code look like in F#? (part one: expressions and statements)"

सी # एक ऑपरेटर, जिसे " डिफ़ॉल्ट " जो शून्य-प्रारंभिक किसी दिए गए प्रकार का मान देता है:

default(int) 

इसमें सीमित उपयोगिता है; आमतौर पर आप सामान्य में डिफ़ॉल्ट (टी) का उपयोग कर सकते हैं।

Unchecked.defaultof<int> 
31

तकनीकी रूप से एफ # समारोह Unchecked.defaultof<'a> सी # में default ऑपरेटर के लिए एक समान है: एफ # एक पुस्तकालय समारोह के रूप में एक समान निर्माण है। हालांकि, मुझे लगता है कि defaultof को को असुर एफ # में चीज माना जाता है और केवल तभी उपयोग किया जाना चाहिए जब यह वास्तव में आवश्यक हो (जैसे null का उपयोग करना, जिसे F # में भी निराश किया जाता है)।

अधिकांश स्थितियों में, आप option<'a> प्रकार का उपयोग कर defaultof की आवश्यकता से बच सकते हैं। यह आपको इस तथ्य का प्रतिनिधित्व करने की अनुमति देता है कि एक मूल्य अभी तक उपलब्ध नहीं है।

हालांकि, विचार को प्रदर्शित करने के लिए यहां एक संक्षिप्त उदाहरण दिया गया है। निम्नलिखित सी # कोड:

T temp = default(T); 
// Code that may call: temp = foo() 
if (temp == default(T)) temp = bar(arg) 
return temp; 

शायद एफ # में इस तरह लिखा जाएगा (जरूरी सुविधाओं का उपयोग कर):

let temp = ref None 
// Code that may call: temp := Some(foo()) 
match !temp with 
| None -> bar(arg) 
| Some(temp) -> temp 

बेशक यह अपने विशिष्ट परिदृश्य पर और कुछ मामलों defaultof में निर्भर करता है केवल एक चीज है तुम कर सकते हो। हालांकि, मैं बस यह इंगित करना चाहता था कि defaultof का उपयोग एफ # में कम बार किया जाता है।

+1

अपने सी # उदाहरण में, यदि आप कथन के अंदर समानता ऑपरेटर के बजाय असाइनमेंट ऑपरेटर का उपयोग करते हैं। क्या वह जानबूझकर है? – doppelgreener

+0

मुझे कहना चाहिए कि यह मेरे लिए काम नहीं करता है, टी = रेफरी नहीं टी: = कुछ (संदर्भ। इत्यादि। फर्स्टऑर्डडिफॉल्ट (मजेदार ii -> ii.Name = i.Name)) मैच 0 टीके साथ। कुछ इसे -> - यहां समाप्त हुआ यह भी शून्य है | कोई नहीं -> अनदेखा करें –

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