2010-11-07 10 views
8

मैं समझता हूं कि bigint एक फ़ंक्शन नहीं बल्कि एक प्रकार का कन्स्ट्रक्टर है। यही कारण है कि यह विफल हो जाता है:एफ # में बिल्कुल "bigint" क्या है?

// Won't compile 
let foo = 10 |> bigint 

मैं समझता हूँ कि मैं एक नया समारोह जो एक पूर्णांक स्वीकार करता है और एक bigint देता है, और उसके बाद पाइप लाइन ऑपरेटर काम करेंगे बना सकते हैं।

हालांकि, मुझे समझ नहीं आता क्यों यह काम करता है है:

let bar = bigint 10 

bigint तो एक प्रकार निर्माता, मैं क्यों new की आवश्यकता नहीं है? bigint वास्तव में System.Numerics.BigInteger के कन्स्ट्रक्टर के उपनाम के रूप में परिभाषित किया गया है?

उत्तर

7

bigint ताकि आप टाइप करते

let x = bigint 10 

आप वास्तव में BigInteger के कहने बनाने System.Numerics.BigInteger के लिए प्रकार abberviation है। F # नया रचनाकारों में वैकल्पिक है, मूल रूप से इसका उपयोग तब किया जाना चाहिए जब IDISposable

+0

लागू करने वाले प्रकारों के उदाहरण बनाते हैं। मुझे नहीं पता था कि 'नया' वैकल्पिक था। यहां संक्षिप्त संक्षेपों की एक सूची दी गई है, लेकिन यह 'bigint' को छोड़ देती है: http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html#_Toc270597684। मैं देखता हूं कि 'int64' भी एक प्रकार का संक्षेप है। हालांकि, मेरा मानना ​​है कि एक समारोह 'int64' भी है। मुझे आश्चर्य है कि क्यों 'bigint' एक प्रकार का संक्षेप है, लेकिन' int64' एक फ़ंक्शन है। – royco

+2

मुझे नहीं पता कि क्या कोई कारण है, जबकि "int16" जैसे अन्य सभी सांख्यिक प्रकार दोनों "प्रकार संक्षेप" और "फ़ंक्शंस" हैं, 'बिगिंट' केवल "टाइप कैचविटन" है। मैं अनुमान लगा सकता हूं कि ऐसा इसलिए है क्योंकि एकमात्र कारण "int16" जैसे कार्य मौजूद हैं, प्राथमिक आईएल पूर्णांक का खुलासा करने का एक तरीका प्रदान करना है (उदाहरण के लिए 'conv.i2') जिसमें "लाइब्रेरी" कॉल नहीं है और आमतौर पर इसका खुलासा किया जाता है अन्य भाषाओं के उपयोगकर्ताओं को "कास्ट" सुविधाओं के माध्यम से अन्य भाषाओं के उपयोगकर्ताओं के लिए। – Brian

+0

@ ब्रायन, अंतर्दृष्टि। लेकिन मैं इंगित करूंगा कि 'दशमलव' एक रूपांतरण फ़ंक्शन फॉर्म का आनंद लेता है और केवल एक सादा संरचना है ... शायद 'बिगिन' भी एक जगह का हकदार है :) –

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