मैं एक छोटे से डीएसएल पर काम कर रहा हूं जो ओवरलोडेड मानों पर प्रयुक्त ऑपरेटरों को कैप्चर करने के लिए ओवरलोडिंग के लिए nomethod
फ़ॉलबैक का उपयोग करता है। यह के कार्य के समान है जो overload
के दस्तावेज़ में वर्णित है।क्या पर्ल में रेगेक्स बाध्यकारी ऑपरेटर `= ~` अधिभारित करने का कोई तरीका है?
यह मानक तुलना ऑपरेटरों के लिए ठीक काम करता है, लेकिन निम्नलिखित पर विचार:
my $ret = $overloaded =~ /regex/;
इस मामले में, nomethod
$overloaded
stringify को कहा जाता है, और उसके बाद से अधिक भार खो दिया है हो जाता है। मैंने एक बंधे हुए चर को वापस करने के बारे में सोचा, जो कम से कम मुझे मूल अधिभारित वस्तु के आसपास ले जाने देगा, लेकिन यह अभी भी रेगेक्स के निष्पादन के दौरान खो जाएगा।
तो, परम सवाल अगर वहाँ एक प्रतीकात्मक कैलकुलेटर की 'overload
रों विचार का विस्तार करने के लिए regex बाध्यकारी ऑपरेटरों =~
और !~
शामिल करने के लिए किसी भी तरह से है, तो यह है कि इसके बाद के संस्करण कोड नमूना ($overloaded, qr/regex/, 0, '=~')
या कुछ इसी तरह के साथ nomethod
कहेंगे है?
मैंने स्मार्टमैच ऑपरेटर ~~
को ओवरलोड करने में भी संक्षेप में देखा लेकिन ऐसा लगता है कि यह चाल भी नहीं है (हमेशा अधिभार के बजाय रेगेक्स मिलान के लिए डिफ़ॉल्ट)।
संपादित करें: मैंने ~~
और अधिक देखा, और पाया कि my $ret = $overloaded ~~ q/regex/
स्मार्टमैचिंग नियमों के कारण काम करता है। बंद करें, लेकिन आदर्श समाधान नहीं है, और मैं इसे पूर्व 5.10 काम करना चाहता हूं, इसलिए मैं अन्य उत्तरों का स्वागत करता हूं।
मुझे लगता है कि रेगेक्स इंजन में एक रैपर की आपूर्ति करना या तो काम नहीं करेगा यदि आप इसे 5.10 से पहले काम करना चाहते हैं। –
पागलपन खत्म करो! पायथन सीखो! – bukzor
@bukzor: मुझे पूरा यकीन है कि आप पायथन में रेगेक्स बाध्यकारी ऑपरेटर को अधिभारित नहीं कर सकते हैं, क्योंकि इसमें कोई नहीं है। बेशक, आप एक कक्षा लिख सकते हैं जो आपको समान, सीमित कार्यक्षमता प्रदान करेगी: http://code.activestate.com/recipes/302498-re-match-and-replace-through-operator-overloading/ –