inline - how are abs, sign etc implemented in F# -


मैंने पाया कि:

  abs -10 abs -10l   

दोनों काम तो मुझे आश्चर्य है कि कैसे एफ # इसे लागू किया है और स्रोत कोड में एक खोज की है:

  प्रकार AbsDynamicImplTable & lt; 'T & gt; () = ABDynamic x = AbsDynamicImplTable & lt; _ & gt;। X [& lt; CompiledName ("एब्स") & gt;] इनलाइन पेट (x: ^ T) दें: ^ टी = एब्सडायमिक एक्स, ^ ^ T: ^ टी = absImpl x  

और मैं इन के साथ भ्रमित हूँ

जैसा कि मुझे abs जैसी फ़ंक्शन में पता है, हमें इनपुट के साथ 0 की तुलना करनी होगी, और विभिन्न प्रकारों के लिए अलग-अलग 0 एस हैं

धन्यवाद

कैओस पैंडियन द्वारा पोस्ट किए गए कोड में कुछ स्पष्टीकरण जोड़ने के लिए, एफ # फ़ंक्शन जैसे abs यह है कि वे किसी भी संख्यात्मक प्रकार के साथ काम कर सकते हैं। यह सिर्फ एफ # /। नेट जेनेरिक के उपयोग से व्यक्त करने का कोई रास्ता नहीं है - केवल एक ही समर्थित प्रतिबंध है कि टाइप पैरामीटर एक निश्चित अंतरफलक लागू करता है या एक कन्स्ट्रक्टर होता है, लेकिन संख्यात्मक प्रकारों के लिए कोई बाधा नहीं है।

एफ # भी स्थैतिक बाधाओं का समर्थन करता है (टाइप पैरामीटर ^ a के बजाय सामान्य 'a है) और ये इनलाइनिंग का उपयोग करते हुए समय संकलित करने पर संसाधित होते हैं (यह भी बताता है कि फ़ंक्शन के पास क्यों है हो इनलाइन )। आप LanguagePrimitives से अंतर्निहित फ़ंक्शन का उपयोग करके स्थिर बाधाओं के साथ अपना फ़ंक्शन लिख सकते हैं जिसमें कई उपयोगी फ़ंक्शंस शामिल हैं जो कुछ बाधाओं की आवश्यकता होती है:

  & gt; इनलाइन आधा (संख्या: ^ ए) दें: ^ a = भाषाप्रतिष्ठित। डिविइडबैंट & lt; (^ ए) & gt; संख्या 2 ;; वैल इनलाइन आधा: ^ ए - & gt; ^ A ^ ^: (स्थैतिक सदस्य डिवाइडबीआईआईंट: ^ ए * इंट - & gt; ^ ए) & gt; आधा 42.0 ;; इसे वैल: फ्लोट = 21.0 & gt; आधा 42.0 एफ ;; यह मान: float32 = 21.0f  

ध्यान दें कि बाधाओं का अनुमान लगाया गया है - divideByInt की आवश्यकता है कि प्रकार में dividebyInt सदस्य है, इसलिए हमारा कार्य एक ही बात की आवश्यकता है (और यह आपके अपने प्रकार के साथ काम करेगा यदि यह भी इस सदस्य का है, जो काफी उपयोगी है!)।

इसके अतिरिक्त, abs का कार्यान्वयन केवल दो अतिरिक्त ट्रिक्स का उपयोग करता है जो केवल F # लाइब्रेरी में अनुमति है - यह विभिन्न प्रकारों के लिए अलग-अलग कोड (जब इनलाइनिंग के लिए इस्तेमाल किया जाता है) निर्दिष्ट करता है ( जब ^ a: int = .... का उपयोग करके) और एक फॉलबैक केस जो कि Abs सदस्य का उपयोग करता है, तो यह किसी भी स्पष्ट रूप से सूचीबद्ध प्रकार या एक प्रकार के साथ काम करेगा Abs सदस्य एक अन्य चाल retype फ़ंक्शन है, जो "प्रकार बदलता है", लेकिन इसमें कोई भी कोड नहीं होता है - एकमात्र उद्देश्य कोड प्रकार-जांच करना है, लेकिन यह बहुत असुरक्षित हो सकता है - इसलिए यह केवल एफ # पुस्तकालयों में उपयोग किया जाता है


Comments

Popular posts from this blog

c++ - QtQuick: QQmlApplicationEngine failed to load component qrc:/main.qml:23 Invalid attached object assignment -

sql - dynamically varied number of conditions in the 'where' statement using LINQ -

iphone - Smoothing a rounded stroke in Core Graphics -