आपको इनलाइन का उपयोग करना चाहिए जब आपको किसी फ़ंक्शन को परिभाषित करने की आवश्यकता होती है जिसमें प्रत्येक प्रकार की साइट पर इसका प्रकार (पुनः) मूल्यांकन किया जाना चाहिए, सामान्य कार्य के विपरीत, जिसका प्रकार केवल मूल्यांकन (अनुमानित) होगा पहले उपयोग की साइट, और फिर उसके बाद हर जगह उस पहले अनुमानित प्रकार हस्ताक्षर के साथ स्थाई रूप से टाइप किया जा रहा है।
इनलाइन मामले में, समारोह परिभाषा है, जबकि सामान्य (कोई नहीं-इनलाइन) मामले में, समारोह स्थिर (और अक्सर परोक्ष) द्वारा लिखा गया है, प्रभावी रूप से सामान्य/बहुरूपी है।
तो, आप इनलाइन, निम्नलिखित कोड का उपयोग करता है, तो:
let inline add a b = a + b
[<EntryPoint>]
let main args =
let one = 1
let two = 2
let three = add one two
// here add has been compiled to take 2 ints and return an int
let dog = "dog"
let cat = "cat"
let dogcat = add dog cat
// here add has been compiled to take 2 strings and return a string
printfn "%i" three
printfn "%s" dogcat
0
का निर्माण करेगा, और निम्न उत्पादन का उत्पादन करने के लिए संकलन:
3
dogcat
दूसरे शब्दों में, एक ही ऐड समारोह परिभाषा है दोनों कार्यों को उत्पन्न करने के लिए प्रयोग किया जाता है जो पूर्णांक में जोड़ता है, और एक फ़ंक्शन जो दो तारों को जोड़ता है (वास्तव में अंतर्निहित ऑपरेटर ओवरलोडिंग + को इनलाइन का उपयोग करके हुड के तहत भी प्राप्त किया जाता है)।
इस कोड जबकि
, सिवाय इसके कि ऐड समारोह नहीं रह घोषित किया जाता है इनलाइन समान:
let add a b = a + b
[<EntryPoint>]
let main args =
let one = 1
let two = 2
let three = add one two
// here add has been compiled to take 2 ints and return an int
let dog = "dog"
let cat = "cat"
let dogcat = add dog cat
// since add was not declared inline, it cannot be recompiled
// and so we now have a type mismatch here
printfn "%i" three
printfn "%s" dogcat
0
संकलन नहीं होगा, इस शिकायत के साथ विफल:
let dogcat = add dog cat
^^^ - This expression was expected to have type int
but instead has type string
जहां इनलाइन उपयोग करने का एक अच्छा उदाहरण उपयुक्त है, जब आप 2 तर्कों के साथ फ़ंक्शन के तर्कों के अनुप्रयोग के क्रम को उल्टा करने के लिए एक सामान्य फ़ंक्शन को परिभाषित करना चाहते हैं, उदाहरण के लिए
let inline flip f x y = f y x
के रूप में इस सवाल का Different argument order for getting N-th element of Array, List or Seq को @pad से जवाब में किया जाता है।
मुझे खेद है, लेकिन मैं सिर्फ एफ # सीखना शुरू कर रहा हूं और मुझे आपका जवाब बिल्कुल समझ में नहीं आ रहा है, क्या आप मुझे कुछ यूआरएल बता सकते हैं जहां आपके द्वारा उपयोग की जाने वाली अवधारणाओं को समझाया गया है? – knocte
'' पी: 'ए'' - यह आवश्यक है कि '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' > कुछबेस टाइप प्रकार, आदि दूसरी तरफ, '' p:^a'' - यह आवश्यक है कि '' p'' एक प्रकार हो जो कोड में आमंत्रण बिंदुओं पर कुछ विशेषताओं या उप प्रकार का समर्थन करता है या एक सहायक मॉड्यूल खोला या एक विस्तार विधियों वर्ग, आदि का उपयोग करके – George