मैंने अभी एफ # सीखना शुरू कर दिया।यह '()' नोटेशन का क्या अर्थ है?
let name() = 3
name()
कि क्या इस से अलग है::
let name = 3
name
पुस्तक निम्नलिखित अंकन का उपयोग करता है?
मैंने अभी एफ # सीखना शुरू कर दिया।यह '()' नोटेशन का क्या अर्थ है?
let name() = 3
name()
कि क्या इस से अलग है::
let name = 3
name
पुस्तक निम्नलिखित अंकन का उपयोग करता है?
का जवाब दे क्या ()
है इससे पहले कि कुछ मूल बातें परिभाषित और कुछ उदाहरण करवाने की सुविधा देता है।
एफ # एक let statement में एक नाम, शून्य या अधिक तर्क, और एक अभिव्यक्ति है।
इस सरल को रखने के लिए हम साथ जाएंगे:
यदि कोई तर्क नहीं है तो लेट स्टेटमेंट value है।
तर्क देखते हैं तो देना बयान एक function है।
एक मूल्य के लिए, अभिव्यक्ति का परिणाम केवल एक बार मूल्यांकन किया है और पहचानकर्ता के लिए बाध्य है; यह अपरिवर्तनीय है।
एक समारोह के लिए, अभिव्यक्ति हर बार समारोह में कहा जाता है मूल्यांकन किया जाता है।
तो यह मूल्य
let a = System.DateTime.Now;;
हमेशा समय जब वह पहली बार
a;;
val it : System.DateTime = 1/10/2017 8:16:16 AM ...
a;;
val it : System.DateTime = 1/10/2017 8:16:16 AM ...
a;;
val it : System.DateTime = 1/10/2017 8:16:16 AM ...
मूल्यांकन किया जाता है या बाद में लागू किया, यानी और इस समारोह होगा
let b() = System.DateTime.Now;;
अलवा होगा वाईएस एक नया समय हर बार यह मूल्यांकन किया जाता है, अर्थात
b();;
val it : System.DateTime = 1/10/2017 8:18:41 AM ...
b();;
val it : System.DateTime = 1/10/2017 8:18:49 AM ...
b();;
val it : System.DateTime = 1/10/2017 8:20:32 AM ...
अब क्या ()
साधन की व्याख्या करने के लिए है। ध्यान दें कि System.DateTime.Now
को काम करने के लिए कोई तर्क की आवश्यकता नहीं है।
अभिव्यक्ति की कोई आवश्यकता नहीं होने पर हम फ़ंक्शन कैसे बना सकते हैं?
हर तर्क एक प्रकार है करने के लिए है, तो एफ # कार्यों कि इकाई प्रकार के लिए कोई तर्क और केवल मूल्य की जरूरत है ()
है के लिए unit type है।
तो इस प्रकार के int
let c x = x + 1;;
में से एक तर्क x
साथ एक समारोह है और इस प्रकार के unit
let b() = System.DateTime.Now;;
()
का उपयोग एक ऐसा फ़ंक्शन बनाता है जो दूसरे मामले की तुलना में unit
का एक पैरामीटर लेता है जो कि केवल एक साधारण पूर्णांक है।
यह विशेष रूप से महत्वपूर्ण है जब आप फ़ंक्शन के निष्पादन को नियंत्रित करना चाहते हैं।
मुख्य अंतर यह है कि जब आप
let name() =
printfn "hello"
1
है बनाम
let name =
printfn "hello"
1
तो
let t = name + name
एक बार प्रिंट होगा "हैलो" है। लेकिन
let t = (name()) + (name())
दो बार "हैलो" प्रिंट करेगा।
फ़ंक्शन का मूल्यांकन करने वाले आदेश पर विचार करते समय आपको इसके साथ सावधान रहना होगा।
let intversion =
printfn "creating integer constant"
1
printfn "integer created"
let funcversion() =
printfn "executing function"
1
printfn "function created"
let a = intversion + intversion
printfn "integer calculation done"
let b = (funcversion()) + (funcveriosn())
printfn "function calculation done"
इस क्रम में निम्नलिखित
निम्नलिखित कार्यक्रम पर विचार करें
मुझे लगता है कि मैं और अधिक उदाहरण की जरूरत में से एक तर्क ()
साथ एक समारोह है। यह बहुत स्पष्ट नहीं है कि यह अभी तक इतना महत्वपूर्ण क्यों है। वैसे भी, वह '; 1' के लिए क्या है? –
Fabricio
मैं कुछ और उदाहरण जोड़ूंगा। '; 1' हमें एक नई लाइन के बराबर और फिर 1) ताकि वापसी मूल्य हो। मैंने इसे ब्रेवटी –
के लिए रखा है, मुझे यह नहीं मिला कि "पूर्णांक निरंतर बनाना" क्यों मुद्रित किया गया है यदि इसे अभी परिभाषित किया गया है। – Fabricio
किया
let name() = 3
name()
name
में एक समारोह है, प्रकार unit -> int
की।
let name = 3
name
name
में प्रकार int
की, एक पूर्णांक है।
एफ # में, प्रत्येक फ़ंक्शन में इनपुट प्रकार और आउटपुट प्रकार होता है। let name() = 3
का इनपुट प्रकार unit
है, जिसमें केवल एक मान ()
है।इसका आउटपुट प्रकार int
है, जिसमें –2,147,483,648
से 2,147,483,647
के मान हैं। एक और उदाहरण के रूप में bool
में केवल दो मान हैं, true
और false
।
तो आपसे सवाल है कि ()
का उपयोग क्या है। यदि आप फ़ंक्शन के इनपुट मान निर्दिष्ट नहीं करते हैं, तो इसे निष्पादित नहीं किया जा सकता है। तो आपको इसे निष्पादित करने के लिए अपने फ़ंक्शन let name()=3
पर इनपुट मान निर्दिष्ट करना होगा और इसके इनपुट प्रकार की वजह से unit
है, केवल एक ही मान जिसका उपयोग आप कर सकते हैं ()
है।
let name : (unit -> int) = (fun _ -> 3);;
और को यह तुलना:
let name : int = 3
पर साइड इफेक्ट्स हो सकता है, धन्यवाद! यह अपवर्त आपको 10k प्रतिनिधि देता है। :) – Vache
निश्चित रूप से नहीं एक समारोह कॉल या ऐसा कुछ के लिए कुछ वाक्य रचना के रूप में ()
क्या समझते हो
यहाँ एक और तरीका नाम समारोह को परिभाषित करने के लिए है । यह सिर्फ एक मूल्य है, जैसे 3, 5, 'क्यू', झूठा, या "ब्लाह"। यह Unit
प्रकार का मान होता है, और वास्तव में यह केवल प्रकार इकाई का मान है, लेकिन वास्तव में यह बिंदु के बगल में है। ()
यहां है एक मूल्य। मैं इतना तनाव नहीं कर सकता।
सबसे पहले विचार करना
let name x = 3
यह क्या है? यह सिर्फ एक्स पर एक फ़ंक्शन को परिभाषित करता है, जहां x किसी भी प्रकार का हो सकता है। सी # में होगा:
int Name<T>(T x)
{
return 3;
}
अब अगर हम let name() = 3
को देखो (और मैं कुछ हद तक, वहाँ है कि अतिरिक्त रिक्ति डाल सलाह देते हैं तो यह बनाता है ()
कुछ वाक्यात्मक संरचना की तुलना में अधिक एक मूल्य देखने के लिए) तो सी # में आप सोच सकते हैं यह (स्यूडोकोड)
int Name<T>(T x) where T == Unit //since "()" is the only possible value of Unit
{
return 3;
}
की तरह कुछ के रूप में या, और अधिक बस
int Name(Unit x)
{
return 3;
}
तो हम देखते हैं कि सब let name() = 3
, है वायुसेना की परिभाषा एकीकरण जो Unit
तर्क लेता है, और उपरोक्त सी # संस्करण की तरह 3 लौटाता है।
हालांकि अगर हम let name = 3
पर देखते हैं तो यह केवल एक चर परिभाषा है, जैसे var name = 3
सी # में।
बस शब्दों में कहें, क्या यह पैरामीटर के बिना एफ फंक्शन का एफ # फॉर्म है? – Fabricio
@ फ़ैब्रिकियो हां। लेकिन मैंने टिप्पणी के लिए 15 वर्णों को कम करने के लिए कुछ जोड़ा है। –
@ फ़ैब्रिकियो: मैं यह नहीं कहूंगा। 'बी' यहां एक फ़ंक्शन है जो * एक * पैरामीटर लेता है:' unit'। यदि आप इसे कोष्ठक के बिना कॉल करने का प्रयास करते हैं, तो आपको 'b' फ़ंक्शन के * परिणाम * की बजाय * फ़ंक्शन मान *' b' मिलता है। कोशिश करें 'चलो डी = बी ;; डी(); 'एफएसआई में। –