इससे पहले मैंने अपने पहले एफ # प्रोजेक्ट पर कुछ फीडबैक का अनुरोध किया था। सवाल बंद करने से पहले क्योंकि दायरा बहुत बड़ा था, कोई इसे देखने के लिए बहुत दयालु था और कुछ प्रतिक्रिया छोड़ देता था।एफ #: शीर्ष-स्तरीय कार्यों को सदस्य विधियों में परिवर्तित करने के लाभ?
उन चीजों में से एक जो उन्होंने उल्लेख किया था, यह इंगित कर रहा था कि मेरे पास कई नियमित कार्य थे जिन्हें मेरे डेटाटाइप पर विधियों में परिवर्तित किया जा सकता था। कर्तव्यनिष्ठा मैं
let getDecisions hand =
let (/=/) card1 card2 = matchValue card1 = matchValue card2
let canSplit() =
let isPair() =
match hand.Cards with
| card1 :: card2 :: [] when card1 /=/ card2 -> true
| _ -> false
not (hasState Splitting hand) && isPair()
let decisions = [Hit; Stand]
let split = if canSplit() then [Split] else []
let doubleDown = if hasState Initial hand then [DoubleDown] else []
decisions @ split @ doubleDown
की तरह बदल रहा है बातें माध्यम से चला गया यह करने के लिए:
type Hand
// ...stuff...
member hand.GetDecisions =
let (/=/) (c1 : Card) (c2 : Card) = c1.MatchValue = c2.MatchValue
let canSplit() =
let isPair() =
match hand.Cards with
| card1 :: card2 :: [] when card1 /=/ card2 -> true
| _ -> false
not (hand.HasState Splitting) && isPair()
let decisions = [Hit; Stand]
let split = if canSplit() then [Split] else []
let doubleDown = if hand.HasState Initial then [DoubleDown] else []
decisions @ split @ doubleDown
अब, मैं शक नहीं है मैं एक बेवकूफ हूँ, लेकिन से (मेरा अनुमान है कि) बनाने सी # इंटरॉप आसान अन्य , उसने मुझे क्या हासिल किया? विशेष रूप से, मुझे कुछ डी फायदे मिले, रूपांतरण के अतिरिक्त काम की गणना नहीं की गई (जिसे मैं नहीं मानूंगा, क्योंकि मैं इसे पहली जगह में कर सकता था, मुझे लगता है, हालांकि यह एफ # इंटरएक्टिव का उपयोग करता दर्द का अधिक)। एक बात के लिए, अब मैं आसानी से "पाइपलाइनिंग" समारोह के साथ काम करने में सक्षम नहीं हूं। मुझे some |> chained |> calls
से (some |> chained).Calls
आदि में जाना और बदलना पड़ा। इसके अलावा, यह मेरे प्रकार के सिस्टम डंबर को बनाने लग रहा था - जबकि मेरे मूल संस्करण के साथ, मेरे कार्यक्रम को बड़े पैमाने पर सदस्य विधियों में परिवर्तित करने के बाद, कोई प्रकार की टिप्पणियों की आवश्यकता नहीं थी, मुझे त्रुटियों का एक गुच्छा मिला लुकअप उस बिंदु पर अनिश्चित होने के कारण, और मुझे जाना था और टाइप एनोटेशन जोड़ना था (इसका एक उदाहरण ऊपर (/=/)
में है)।
मुझे उम्मीद है कि मैं बहुत संदिग्ध नहीं आ गया हूं, क्योंकि मुझे प्राप्त सलाह की सराहना करते हैं, और मेरे लिए मूर्खतापूर्ण कोड लिखना महत्वपूर्ण है। मैं सिर्फ उत्सुक हूं कि मुहावरे किस तरह से है :)
धन्यवाद!
परेशान करते हुए, आप डॉट नोटेशन का उपयोग करके प्रत्येक विधि कॉल को एक नई पंक्ति पर नहीं डाल सकते हैं। –