2015-11-16 5 views
6

रूबी 2.3.0 सुरक्षित नेविगेशन सिंटैक्स प्रस्तुत करता है जो एक नए ऑपरेटर को पेश करके जंजीर विधि कॉल के शून्य प्रबंधन को आसान बनाता है जो पिछले कथन का मान शून्य नहीं है, तो केवल विधि को कॉल करता है। यह एक ऐसी सुविधा है जो उदाहरण के लिए पहले से मौजूद है # सी, ग्रोवी और स्विफ्ट में। उदाहरण in Groovy के लिए, वाक्य रचनारुबी सुरक्षित नेविगेशन ऑपरेटर के लिए अपने स्वयं के वाक्यविन्यास का उपयोग क्यों करता है?

foo?.bar 

जो मूल रूप से मतलब है कि परिणाम मूल्य की foo.bar जब तक fooअशक्त, जिस स्थिति में वापसी मान भी अशक्त और है कि है इस प्रकार कोई अपवाद नहीं फेंक दिया जाता है। C# (नल-सशर्त ऑपरेटर) और Swift (वैकल्पिक-चेनिंग अभिव्यक्ति कहा जाता है) इस नोटेशन का उपयोग करें।

तो वाक्यविन्यास अन्य भाषाओं में काफी मानक प्रतीत होता है। अब, क्यों रूबी में वाक्यविन्यास

foo&.bar 

इसके बजाय क्यों?

+4

'foo? .bar' का अर्थ है "कॉल विधि' foo? ', फिर परिणाम पर विधि' बार 'कॉल करें"। 2.3.0 एक पिछड़ा-संगत रिलीज है, आपके प्रस्तावित वाक्यविन्यास के परिणामस्वरूप ** भारी ** ब्रेकेज होगा, कम से कम * इसे पेश किए जाने से पहले कुछ वर्षों की बहिष्करण चेतावनी की आवश्यकता होगी। –

उत्तर

11

यह उत्तर रुबी के अंक ट्रैकिंग में the discussion of the feature request पर आधारित है। Ruby's author Yukihiro Matsumoto के मुताबिक रूबी में ऑपरेटर ?. पेश करना संभव नहीं होगा क्योंकि foo? वैध विधि का नाम है और इस प्रकार इसे पार्स नहीं किया जा सका। ऑपरेटर के लिए पहला उम्मीदवार अनुक्रम .? उलट दिया गया था। वह वाक्यविन्यास already implemented (नोब्यूशी नाकाडा द्वारा) था लेकिन बाद में इसे छोड़ दिया गया क्योंकि इसे अन्य भाषाओं द्वारा प्रस्तुत मूल वाक्यविन्यास के बहुत करीब माना जाता था (जो पहले उल्लेख किया गया संभव नहीं था)। अंतिम वाक्यविन्यास &. को मत्सुमोतो द्वारा suggested के रूप में स्वीकार किया गया था।

यहाँ, इस वाक्य मात्सुमोतो

द्वारा दिए गए मैं थोड़ी देर के लिए इस बारे में सोचते हैं, और .? के बजाय &. शुरू करने के बारे में सोच के लिए औचित्य है क्योंकि:

  • .? में ?. के समान है स्विफ्ट और अन्य भाषाओं, लेकिन वैसे भी अलग है।
  • चूंकि ? रुबी में विधि नामों का एक वैध प्रत्यय है, हम पहले से ही हमारे कार्यक्रमों में बहुत सारे प्रश्न चिह्न देख रहे हैं।
  • u&.profile हमें u && u.profile का संक्षिप्त रूप के रूप में याद दिलाता है।

लेकिन &. के व्यवहार रखा जाना चाहिए, जैसे कि यह nil छोड़ लेकिन false पहचान करनी चाहिए।

इस वाक्य रचना तो Ruby 2.3.0-preview1 के हिस्से के रूप में जारी किया गया।

+2

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

+1

मैटज़ अपने रूबीकॉन्फ़ 2015 की मुख्य बात में ऑपरेटर की इस पसंद के लिए भी यही औचित्य बताता है। संदर्भित बग रिपोर्ट की तुलना में वीडियो को देखना अधिक समझदार हो सकता है। वह इंगित करता है कि '& .' को" अकेला ऑपरेटर "कहा जाता है (कुछ कल्पना के साथ, इसे उनके सामने बिंदु पर बैठे तल पर बैठे अकेले व्यक्ति की तरह दिखने के लिए देखा जा सकता है)। स्लाइड्स 78-87 देखें, 15:00 से 17:40 के बीच [YouTube मुख्य नोट वीडियो] (https://www.youtube.com/watch?v=LE0g2TUsJ4U) –

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