पर्ल के autobox
से अनजान लोगों के लिए, यह एक मॉड्यूल है जो आपको प्राइमेटिव्स में निर्मित विधियों देता है, और आपको उन्हें ओवरराइड करने देता है।क्या मुझे पर्ल में ऑटोबॉक्स का उपयोग करना चाहिए?
# primitives
'a string'->toupper();
10->to(1); # returns [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
# Arrays, array refs
[qw(A B C D E)]->for_each(sub { ... });
@array->length()
# Hashes, hash refs
{ key => 'value', key2 => 'value2' }->values()
%hash->keys()
# Even specify your own base class...
use autobox SCALAR => 'Foo';
यह कुल मिलाकर प्रकारों पर बनाए गए तरीकों को वस्तुओं की तरह महसूस करता है, कुछ कार्यों को सरल बनाता है और दूसरों को और अधिक स्पष्ट लगता है।
हालांकि ...
autobox
डॉक्स का कहना है कि वहाँ performance penalties है कि, कुछ बस वस्तु पर विधि, मानक वाक्य रचना की तुलना में अधिक बुला से अधिक है। And then, there's a few caveats about its use in eval
s (specifically, string evals) that might, in some circumstances, cause issues. ऐसा लगता है कि यह कई पर्ल डिस्ट्रोज़ के साथ मानक नहीं आता है।
क्या यह कभी भी ऑटोबॉक्स का उपयोग करने के लिए वास्तव में लायक है?
यह बहुत अच्छा है! – Geo
यह बहुत अच्छा है, लेकिन मेरा हिस्सा मदद नहीं कर सकता है, लेकिन "अगर मैं रूबी का उपयोग करना चाहता था ..." –
मैं समझता हूं कि जावा और सी # ऑटोबॉक्सिंग क्यों करते हैं: संग्रह केवल मूल ऑब्जेक्ट से प्राप्त विशिष्ट विधियों का उपयोग करके ऑब्जेक्ट्स पर काम करते हैं कक्षा (संभवतः ओवरराइड), इसलिए संग्रह में भरने से पहले आदिम प्रकारों को उनके ऑब्जेक्ट प्रकारों पर बॉक्स किया जाता है। पर्ल में ऐसा कुछ नहीं है, तो वस्तुओं में बॉक्स प्राइमेटिव क्यों? – Powerlord