2012-12-02 84 views
48

एक नया मणि मैं कुछ विधि कार्यान्वयन खाली छोड़ने की जरूरत के प्रारंभिक मसौदा तैयार करने में (अगले में लागू करने की)सिग्नल कैसे करें "अभी तक लागू नहीं किया गया"?

इसलिए, मैं एक "अभी तक लागू नहीं" अपवाद

मैं संकेत करने के लिए चाहते हैं मुझे आश्चर्य है कि सर्वोत्तम अभ्यास या मानक सम्मेलन रूबी भाषा के लिए इस तरह के प्लेसहोल्डर/अपवाद को कोड करने के लिए विशिष्ट है।

अर्थात्: कुछ की तरह:

  • NotImplementedException नेट फ्रेमवर्क में (सी #)

  • +0

    स्पष्टीकरण: इस रिलीज चरण में हम एक तरह से जरूरत है एक * प्लेसहोल्डर छोड़ने के लिए * (यानी हम चाहते हैं विधि से परिभाषित करने की: यह हो जाएगा कक्षा के 'self.methods' में हम लिख रहे हैं) लेकिन जब तक ठोस कार्यान्वयन नहीं किया जाता है, हमें परीक्षणों की विफलता और आसानी से और तुरंत समझने योग्य ट्रैक की आवश्यकता होती है। –

    उत्तर

    -5

    दस्तावेजों में लागू नहीं किया गया तरीकों का उल्लेख न करें, या उल्लेख है कि वे अभी तक लागु नहीं किया। बस इतना ही।

    +0

    यह दस्तावेज़ीकरण के लिए अच्छी सलाह है, लेकिन मेरे प्रश्न में मेरा क्या मतलब था अपवादों के लिए @padde –

    +2

    द्वारा दिए गए उत्तर में समस्या तब उत्पन्न होती है जब एक गैर-लागू विधि का उपयोग किया जाता है। यदि ऐसी विधि का अस्तित्व ज्ञात नहीं है, तो ऐसी समस्या पहले स्थान पर नहीं उभरती है। और दस्तावेज नहीं है अस्तित्व को छुपाएं पर्याप्त है। यदि आपको लगता है कि उपयोगकर्ता इस तरह की विधि को समझने के लिए स्रोत कोड को देखने के लिए पर्याप्त हैक कर रहा है, तो आप स्रोत में उस विधि के भीतर '# TODO' लिख सकते हैं ताकि यह सूचित किया जा सके कि इसे अभी तक लागू नहीं किया गया है। – sawa

    +0

    #TODO टिप्पणियां एक अच्छी प्रथा है जो वास्तव में मैं निश्चित रूप से अनुसरण करता हूं; अन्य विकास में भी आईडीई (सीएफआर।ग्रहण) डेवलपर को चेतावनी की रिपोर्ट करने के लिए इस विशेष प्रकार की टिप्पणियों का लाभ उठाएं; मैं इसे करने के लिए इस्तेमाल किया गया। बीटीडब्ल्यू मैं अपने प्रश्न को बेहतर तरीके से समझाऊंगा: कह रहा हूं ** प्रारंभिक प्रारूपण में ** मेरा मतलब है कि एक प्री-रिलीज चरण जहां उपयोगकर्ता डेवलपर के समान हैं और हमें ** प्लेसहोल्डर ** (यानी) छोड़ने का तरीका चाहिए विधि * कक्षा *। विधि में होगी, लेकिन यदि कार्यान्वयन अंत में नहीं किया जाता है तो ट्रैक आसानी से और तत्काल समझने योग्य परीक्षणों की विफलता। –

    3

    आप उपयोग कर सकते हैं todonotes-gem

    कुछ उदाहरण के साथ एक documentation नहीं है।

    यह एक अपवाद लागू नहीं करता है, लेकिन एक लॉगिंग तंत्र और अस्थायी समाधान की संभावना है।

    +0

    +1 समाधान मेरे मामले के लिए दिलचस्प हो सकता है –

    +1

    @ फ्रैंको रोडिनी मैंने प्रकाशित किया नया संस्करण (समान कार्यक्षमता, लेकिन एक अन्य फाइल संरचना और बेहतर प्रलेखन) – knut

    -21

    रूबी किसी भी मौजूदा विधि को कॉल करते समय, आपके लिए उठाएगा। यह ज्यादातर मामलों के लिए पर्याप्त होना चाहिए।

    +14

    ऐसा करने पर यह काम कर सकता है, यह मणि/एपीआई के उपयोगकर्ताओं को गलत संदेश भी भेजता है - कि कहीं कोई बग है या कुछ कोड गलत कॉल करने का प्रयास कर रहा है विधि। आपके मामले में, कोड सही विधि को बुला रहा है, लेकिन विधि को अलग से लागू किया जाना चाहिए। मैं इसके बजाय 'NotImplementedError' का सुझाव दूंगा। –

    +3

    मैं agreeme में हूँ सुधीर के साथ एनटी मेरे पास डाउन-वोट करने के लिए पर्याप्त प्रतिनिधि नहीं हैं, लेकिन रूबी दस्तावेज़ीकरण का कहना है कि NoMethodError अपरिभाषित तरीकों के लिए है। इस मामले में, हालांकि, आपके पास कोई कार्यान्वयन विधि नहीं है, जिसमें NoMethodError भ्रामक नहीं है। – josiah

    +7

    @ जोशिया, मैं @ सुधीर जोनाथन से भी सहमत हूं। मैं अमूर्त कक्षाओं को लिखते समय NotImplementedError का उपयोग करता हूं, हालांकि मैं त्रुटि को समझाते हुए एक संदेश जोड़ता हूं, उदाहरण के लिए: 'NotImplementedError raise करें, नया ("# {self.class.name} एक अमूर्त वर्ग है।")। मैं http://books.google.com.au/books?id=bJkznhZBG6gC&pg=PA300&lpg=PA300&dq=ruby+NotImplementedError&source=bl&ots=AlQ2bbuZXI&sig=NAnUopr35Y5wT5CSfK9EUZNK8Qc&hl=en&sa=X&ei=24MnU_iBLuW1iAea2YGgAw&redir_esc=y#v=onepage&q=ruby में इस विधि पाया % 20NotImplementedError & f = false – Jurgen

    1

    मूल उत्तर की तरह लगता है, जो NotImplementedError को बढ़ाने का सुझाव दिया गया था, हटा दिया गया था। मैं इसमें एक दरार ले जाऊंगा: दस्तावेज लिखें।

    कोड जोड़ें जो केवल प्लेसहोल्डर है। आप नहीं चाहते कि लोग उस एपीआई के खिलाफ कोडिंग कर रहे हों, इसलिए उन्हें एक मौका भी न दें (स्वयं शामिल)। इसके बजाए, उस सड़क मानचित्र को दस्तावेज करें जिसे आप वर्तमान में कक्षा और/या रीडमे में नियोजित कर रहे हैं। फिर इसे बदलने के लिए खुला रहें। बाधाएं उस समय तक होती हैं जब आप सड़क मानचित्र में जो भी समस्या हल करते हैं, उसे हल करने के लिए आपके पास उचित समाधान क्या है, इस पर नए विचार होंगे। मुझे लगता है कि यह किसी भी भाषा/ढांचे में कार्रवाई का सही तरीका है, लेकिन मुझे लगता है कि रूबी विशेष रूप से हमें कोड लिखने के लिए प्रोत्साहित करती है जिसे आप निष्पादित करने की योजना नहीं बनाते हैं।

    +0

    हालांकि यह ओपी के प्रश्न को संबोधित करता है, फिर भी उप-वर्ग द्वारा आवश्यक आवश्यक विधियों को दस्तावेज करने का संबंधित प्रश्न है। हालांकि बतख टाइपिंग माता-पिता वर्ग (और इसके परिणामस्वरूप, कोई दस्तावेज़ नहीं) में कोई परिभाषा को प्रोत्साहित नहीं करती है, जो कि कई टीम के सदस्यों या परियोजनाओं के साथ परियोजनाओं पर रखरखाव योग्य नहीं है, जिन्हें किसी तृतीय पक्ष (उदा। एपीआई अनुबंध) को सौंप दिया जा रहा है। – GuyPaddock

    13

    आप उठाना चाहिए NotImplementedError

    raise NotImplementedError 
    

    ruby-doc

    +9

    बस ध्यान रखें, कि, '2.3.0' प्रलेखन के अनुसार, NotImplementedError का उपयोग इस तरह से करने का इरादा नहीं है, लेकिन यह संकेत करता है कि 'सुविधा वर्तमान प्लेटफॉर्म पर लागू नहीं है'। इसमें असामान्य विरासत श्रृंखला 'स्क्रिप्ट एरर> अपवाद' भी है, जहां अधिकांश अपवादों को 'मानक त्रुटि' से विरासत में मिला है। आप शायद इसे इंगित करने के लिए अपनी खुद की त्रुटि बना सकते हैं और इसे 'मानक त्रुटि' से प्राप्त कर सकते हैं और यह भी बेहतर हो सकता है। –

    +0

    @IvanKolmychek 'सुविधा वर्तमान प्लेटफ़ॉर्म पर अभी तक लागू नहीं की गई है' के मामले में मुझे किस अपवाद वर्ग का उपयोग करना चाहिए? –

    +1

    ऐसा करने का सबसे अच्छा तरीका है जो मैं देखता हूं कि आपकी कस्टम अपवाद कक्षा बनाना है जो 'मानक त्रुटि' का उत्तराधिकारी होगा, इसलिए यदि आवश्यक हो तो इसे ठीक से पकड़ लिया जा सकता है। यहां कुछ और क्यों पकड़ रहा है (जैसे 'सिंटेक्स एरर', जिसमें से 'नोट इम्प्लीमेंटेड एरर' 2.3.0 में विरासत में मिला है) एक बुरा विचार हो सकता है: https://stackoverflow.com/questions/10048173/why-is-it-bad- शैली-से-बचाव-अपवाद-ई-इन-रूबी –