2012-12-19 9 views
9

बचें मुझे लगता है कि इस तरह दिखना मेरे वर्तमान जाओ कोड में कुछ भाग होते हैं:बहुत ज्यादा रूपांतरण

i := int(math.Floor(float64(len(l)/4))) 

शब्दाडंबर क्योंकि math.Floor में एक जैसे कुछ समारोह प्रकार हस्ताक्षर के लिए आवश्यक लगता है, लेकिन यह सरल किया जा सकता?

उत्तर

13

सामान्य रूप से, गो का सख्त टाइपिंग कुछ वर्बोज़ अभिव्यक्तियों की ओर जाता है। Verbose का मतलब हालांकि stuttering मतलब नहीं है। रूपांतरण टाइप करें उपयोगी चीजें करें और उन उपयोगी चीजों को स्पष्ट रूप से वर्णित करना मूल्यवान है।

सरलीकरण की चाल अनचाहे प्रकार के रूपांतरणों को लिखना नहीं है, और इसके लिए आपको भाषा परिभाषा जैसे दस्तावेज़ों को संदर्भित करने की आवश्यकता है।

अपने विशिष्ट मामले में, आपको यह जानना होगा कि लेन() int int, और आगे, एक मान> = 0. आपको यह जानने की आवश्यकता है कि 4 एक स्थिर है जो इस अभिव्यक्ति में प्रकार int को ले जाएगा, और आपको यह जानने की जरूरत है कि पूर्णांक विभाजन पूर्णांक मात्रा को वापस कर देगा, जो इस मामले में एक गैर-नकारात्मक int होगा और असल में वास्तव में वह उत्तर होगा जो आप चाहते हैं।

i := len(l)/4 

यह मामला एक आसान है।

+0

हाँ, आपके उत्तर के लिए धन्यवाद। यह एक आसान उदाहरण है, लेकिन उदाहरण के लिए, 'math.Max' जैसे अभिव्यक्तियों के साथ यह परेशान हो जाता है। – GiantSquid

+0

"आपको यह जानने की जरूरत है कि 4 स्थिर है जो इस अभिव्यक्ति में प्रकार int को ले जाएगा"। मैं उत्सुक हूं, आप इसे कैसे जानते हैं, क्योंकि स्थिरांक के पास कोई विशेष प्रकार नहीं है? – kristianp

2

मैं 100% सुनिश्चित नहीं हूं कि गो पूर्णांक विभाजन और पूर्णांक रूपांतरण के साथ कैसे काम करता है, लेकिन यह आमतौर पर छंटनी के माध्यम से होता है। इस प्रकार, यह सोचते हैं लेन (एल) एक पूर्णांक

i:=len(l)/4 

अन्यथा i:= int(len(l))/4 या i:=int(len(l)/4) पहले सैद्धांतिक रूप से थोड़ा तेज सेकंड से भी होने के साथ काम करना चाहिए है।

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