में विभिन्न डेटाटाइप के फील्ड लेबल्स के बीच नाम झड़प विभिन्न ओओ भाषाओं में पृष्ठभूमि से हास्केल आ रहा है, एक चीज जो मुझे कमजोर लगती है वह यह है कि फ़ंक्शन और फील्ड नाम उन प्रकारों के लिए स्कॉप्ड नहीं होते हैं 'के साथ जुड़ा हुआ है, इसलिए अलग-अलग डेटाटाइपों के समान नाम वाले फ़ील्ड होने पर संघर्ष में भागना आसान होता है।हास्केल
अगर मैं इन तीन मॉड्यूल है अस्पष्ट माना जाता है, भले ही केवल दो आयातित नामों में से एक इस संदर्भ में समझ में आता है मॉड्यूल Three
में value
को
module One where
data Foo a = Foo { value :: a }
----
module Two where
data Bar a = Bar { value :: a }
----
module Three where
import One
import Two
foo = Foo { value = 42 } -- compile error here
n = value foo -- and here
अयोग्य संदर्भ। (एक OO भाषा में, foo.value
और bar.value
के लिए संदर्भ स्पष्ट हो जाएगा।)
Foo { One.value = 42 }
लिख कर स्पष्ट करने कर सकते हैं के
, लेकिन यह अजीब लग रहा है। मैं फ़ील्ड को अलग-अलग नाम भी दे सकता हूं, उदा। "fooValue" और "barValue", लेकिन Foo { fooValue = 42 }
में अनावश्यकता भी अजीब दिखती है।
यह वास्तव में अलग-अलग मॉड्यूल में कार्यों के अधिक सामान्य मुद्दे का एक विशेष मामला है, जिनका नाम समान है लेकिन अलग-अलग, असंबंधित प्रकारों पर काम करता है। हालांकि, मैं फील्ड नामों के साथ अक्सर इसमें भाग लेता प्रतीत होता हूं। उदाहरण के लिए, मेरे पास कई प्रकार की डेटाटाइप हैं, जो किसी प्रकार की श्रेणी से संबंधित नहीं हैं लेकिन अक्सर एक साथ उपयोग की जाती हैं, जिनमें रंग मान होते हैं, इसलिए मैं प्रत्येक को "रंग" नामक फ़ील्ड रखना चाहता हूं।
इस प्रकार की स्थिति से बचने के लिए अनुभवी हास्केल डेवलपर्स चीजों का नाम कैसे प्रबंधित करते हैं, और उन्हें मॉड्यूल में व्यवस्थित करते हैं?
मामूली बिंदु: आप 'बार' की परिभाषा में निर्माता को याद कर रहे हैं। –
@ ट्रेविस ब्राउन: ओह, वह एक टाइपो था। इस पर ध्यान दिलाने के लिए धन्यवाद। – Wyzard