2009-10-05 12 views
13

पर्ल के 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 evals (specifically, string evals) that might, in some circumstances, cause issues. ऐसा लगता है कि यह कई पर्ल डिस्ट्रोज़ के साथ मानक नहीं आता है।

क्या यह कभी भी ऑटोबॉक्स का उपयोग करने के लिए वास्तव में लायक है?

+1

यह बहुत अच्छा है! – Geo

+3

यह बहुत अच्छा है, लेकिन मेरा हिस्सा मदद नहीं कर सकता है, लेकिन "अगर मैं रूबी का उपयोग करना चाहता था ..." –

+3

मैं समझता हूं कि जावा और सी # ऑटोबॉक्सिंग क्यों करते हैं: संग्रह केवल मूल ऑब्जेक्ट से प्राप्त विशिष्ट विधियों का उपयोग करके ऑब्जेक्ट्स पर काम करते हैं कक्षा (संभवतः ओवरराइड), इसलिए संग्रह में भरने से पहले आदिम प्रकारों को उनके ऑब्जेक्ट प्रकारों पर बॉक्स किया जाता है। पर्ल में ऐसा कुछ नहीं है, तो वस्तुओं में बॉक्स प्राइमेटिव क्यों? – Powerlord

उत्तर

10

ठीक है, क्या आपने कभी ऐसा मॉड्यूल किया था जो autoboxautobox के बारे में पता लगाने से पहले करता है?

यदि उत्तर 'हाँ' है, तो आपको इसका उपयोग करना चाहिए। यदि आप अवसर प्राप्त करते हैं तो आप बग रिपोर्ट दर्ज करके और उन्हें ठीक करके अपने विकास में योगदान देना चाहेंगे।

दुर्भाग्य से, मैं 'शांत, लेकिन ...' के शिविर में पड़ता हूं, इसलिए मैं आपको और अधिक अंतर्दृष्टि प्रदान नहीं कर सकता।

+3

सहमत है। यह बहुत अच्छा है, और उनमें से कुछ फ़ंक्शन साफ ​​दिखते हैं ('sub {...} -> करी() 'भाग दिलचस्प दिखता है), लेकिन मैं कुछ दस्तावेज और कुछ फ़ंक्शंस देखना चाहता हूं, बस इसकी क्षमता ऑटोबॉक्स अक्षर। यह एक शांत खिलौना की तरह दिखता है, एक शक्तिशाली उपकरण नहीं। यह भविष्य में बदल सकता है, लेकिन यदि यह बदलता है तो यह एपीआई को मजबूत करके होगा। –

6

पाठ्यक्रमों के लिए घोड़े! हालांकि IMHO grok की अक्सर बाएं से दाएं एक श्रृंखला पढ़ने आसान है:

say sort grep /\w/, map { chr } 0 .. 255; 

कम नीचे प्रवाह करता है अच्छे:

say [ 0..255 ]->map(sub { chr })->grep(sub { m/\w/ })->sort->join(''); 

रेफरी: snippet from Hacker News comments

/I3az/

+0

मुझे लगता है कि 'map {chr} 0 में अनाम subroutine नहीं है ..255' जरूरी है - आप 'नक्शा chr, 0 .. 255' कर सकते हैं (बेशक, आप इसे पहले तरीके से बेहतर तरीके से पसंद कर सकते हैं, जो पूरी तरह मान्य है)। मुझे नहीं पता कि आप ऑटोबॉक्स विधियों के साथ ऐसा कर सकते हैं या नहीं। यदि आप इसे अभी नहीं कर सकते हैं, तो यह एक बग रिपोर्ट होनी चाहिए। –

+0

दो लाइनें हैकर न्यूज टिप्पणियों से आती हैं जिन्हें मैंने अभी चिपकाया है (हालांकि ऑटोबॉक्स संस्करण मेरी टिप्पणी थी!) – draegtun

+3

पुन: ऑटोबॉक्स/बग रिपोर्ट: यह एक बग नहीं है क्योंकि इसे ब्लॉक (यानी एनन सब) होना आवश्यक है क्योंकि अन्यथा अभिव्यक्ति का गलत स्थान पर मूल्यांकन किया जाएगा ;-(शायद एक दिन पर्लक्स :: MethodCallWithBlock आवश्यक चीनी बना देगा ...-> नक्शा() {chr} -> grep() {m/w /} -> sort ... शायद? शायद यहां तक ​​कि कोष्ठक भी गिराए जा सकते हैं! – draegtun

5

मैं ऑटोबॉक्स का उपयोग करता हूं:

$c->login($c->req->{params}->hslice([qw/username password/]) 

यह एक मनमाने ढंग से हैश लेता है और इसे { username => <whatever>, password => <whatever> } पर कम कर देता है। आम तौर पर बहुत सारे कोड। Moose :: Autobox के साथ एक प्रतीक।

+0

एचएसलिस के बीच एक अंतर है, जो एक अच्छा काम है, और ऑटोबॉक्स का मुख्य उद्देश्य जो इसे इस तरह से कॉल करने के लिए गोंद प्रदान करता है। $ c-> लॉगिन (hslice ($ c-> req -> {params}, [qw/उपयोगकर्ता नाम पासवर्ड /])? – ijw

+0

वह '$ c-> लॉगिन के समान नहीं है (मानचित्र {$ _ => $ c-> req-> {पैराम्स} -> {$ _}} qw/उपयोगकर्ता नाम पासवर्ड /); '? –

+0

हां। लेकिन जोनाथन का मुद्दा खड़ा है: वह जिस फ़ंक्शन का उपयोग कर रहा है वह निश्चित रूप से कोड कोड है वह – ijw

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