2016-01-17 4 views
7

क्या सक्रिय ऑपरेटर &. रूबी 2.3 से और try! सक्रिय समर्थन से अदला-बदली करने योग्य तरीका है? यदि वे नहीं हैं, तो उनके बीच क्या अंतर है?रूबी 2.3 सुरक्षित नेविगेशन ऑपरेटर 'और के बीच अंतर क्या हैं। और 'कोशिश करो!' ActiveSupport से विधि?

+2

http लागत बौना चाहिए बुला रहे हैं की लागत (एक त्वरित बेंचमार्क में काफी एक परिमाण के क्रम) try धीमा हो जाता है किसी भी वास्तविक उपयोग में हालांकि://mitrev.net/ruby/2015/11/13/the-operator-in-ruby/ आपको बस इतना जानने की ज़रूरत है। –

+1

टीएलडीआर: ज्यादातर मामलों में, वे लगभग विचलित होते हैं, लेकिन कुछ सूक्ष्मताएं हैं जिनके बारे में आपको अवगत होना चाहिए। –

उत्तर

1

एक महत्वपूर्ण अंतर यह है कि try! एक अतिरिक्त विधि कॉल है, जबकि &. नहीं है। मैं एक (वैसे काल्पनिक) अंतर के बारे में सोच सकते हैं कि इस

"1234"&.gsub(/\d/, "a") 
$& #=> "1234" 

कोई आश्चर्य पैदा करता है यहाँ - तो regex वैश्विक चर सेट कर रहे हैं मैं एक regex मैच था ($& मिलान किया स्ट्रिंग है)।

लेकिन अगर (एक ताजा आईआरबी सत्र में - यह महत्वपूर्ण है) मैं

"1234".try!(:gsub, /\d+/, "a") 
$& #=> nil 

कर फिर regex संबंधित वैश्विक शून्य कर रहे हैं। इसका कारण यह है इन वैश्विक वास्तव में वैश्विक नहीं हैं - वे जहां कोड से कहा जाता है

(डॉक्स इस सूत्र और विधि-स्थानीय वैश्विक चर कहते हैं) इस मामले है $& अभी भी सेट हो रही में से बंधा है, लेकिन यह है try! विधि के अंदर सेट किया जा रहा है ताकि आप इसे कभी न देख सकें।

अतिरिक्त विधि कॉल भी वास्तविक विधि आप के try!

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