2012-08-24 29 views
5

में संदर्भ के रूप में उपयोग किया जा सकता है इसका कारण है कि स्पष्ट प्रश्न नहीं हो सकता है, लेकिन मैं यह पूछ रहा हूं, क्योंकि मुझे smth पढ़ना अच्छा नहीं लगता है और मैं समझ नहीं पा रहा हूं कि मैं क्या पढ़ रहा हूं।क्यों टाइपग्लब्स को पर्ल

यहाँ "प्रोग्रामिंग पर्ल" से स्निपेट है:

रास्ता के बाद से जो आप कुछ भिन्नता में हमेशा दिग्दर्शन आप लिए देख रहे हैं किस तरह इंगित करता है, एक typeglob इस्तेमाल किया जा सकता एक संदर्भ में, इस तथ्य के बावजूद कि एक टाइपग्लोब में विभिन्न प्रकार के एकाधिक संदर्भ हैं। तो $ {* मुख्य :: foo} और $ {\ $ main :: foo} दोनों एक ही स्केलर चर का उपयोग करते हैं, हालांकि उत्तरार्द्ध अधिक कुशल है।

मेरे लिए यह गलत का एक तरह दिखाई देता है, और यह सही हो सकता है कि अगर यह है कि इस तरह से थे:

आप अदिश चर के बजाय एक typeglob उपयोग कर सकते हैं संदर्भ हमेशा एक अदिश है क्योंकि और संकलक जानता है कि आपको क्या चाहिए।

पुस्तक के टेक्स्ट रीडर से कारण यह मान सकता है कि संदर्भ स्केलर चर (यानी प्रतीकात्मक तालिका में स्केलर प्रविष्टि) से कुछ और हो सकता है। एक बार मैंने चेतावनी देखी है: use of array as a reference is deprecated, तो ऐसा लगता है कि बहुत पहले यह "प्रोग्रामिंग पर्ल" में यह अनुच्छेद सार्थक था, क्योंकि संदर्भ केवल एक स्केलर नहीं हो सकते थे, लेकिन नए 4 वें संस्करण में यह बस था आधुनिक पर्ल का अनुपालन करने के लिए नहीं बदला।

मैंने इस पुस्तक के लिए इरेटा पेज की जांच की लेकिन कुछ भी नहीं मिला।

क्या मेरी धारणा सही है? यदि नहीं, तो कोई समझाने के लिए कोई सुखद होगा, जहां मैं गलत हूं।

अग्रिम धन्यवाद।

उत्तर

15

नहीं। यह क्या कह रहा है कि सामान्य संदर्भ के विपरीत, एक टाइपग्लोब में एक ही समय में कई प्रकार की चीजें होती हैं। लेकिन जिस तरह से आप यह भिन्नता बात किस प्रकार का संकेत करता है आप चाहते हैं:

use strict; 
use warnings; 
use 5.010; 

our $foo = 'scalar'; 
our @foo = qw(array of strings); 
our %foo = (key => 'value'); 

say ${ *foo };     # prints "scalar" 
say ${ *foo }[0];    # prints "array" 
say ${ *foo }{key};    # prints "value" 

आप "वाक्य रचना अपसंदर्भन typeglob" एक विशेष की जरूरत नहीं है, क्योंकि सामान्य अपसंदर्भन वाक्य रचना को पहले से ही जो typeglob आप चाहते हैं के स्लॉट को इंगित करता है dereference करने के लिए।

ध्यान दें कि यह my चर के साथ काम नहीं करता है, क्योंकि अक्षीय चर टाइपग्लब्स से जुड़े नहीं हैं।

Sidenote: "संदर्भ के रूप में सरणी" चेतावनी इस से संबंधित नहीं है। यह इस वाक्यविन्यास को संदर्भित करता है: @array->[0] (जिसका अर्थ है $array[0])। यह कभी भी वैध वाक्यविन्यास होने का इरादा नहीं था; यह पर्ल 5 पार्सर दुर्घटना से फिसल गया और लैरी ने एक बार देखा तो उसे हटा दिया गया।

+0

मैं इसे के रूप में 'पढ़ चाहिए लेकिन जिस तरह आप इसे भिन्नता को इंगित करता है संदर्भ के प्रकार के हो जाएगा, जिसके लिए अच्छा जगह में आप खड़े होंगे अंतर्निहित बनाया? – user907860

+2

@caligula, नहीं, क्योंकि आप कोई संदर्भ नहीं बना रहे हैं। एक टाइपग्लोब पहले से ही एक तरह का संदर्भ है। आप बस इसे चुनने के लिए कौन सा स्लॉट चुन रहे हैं। – cjm

1

हालांकि यह वास्तव में आपके प्रश्न का उत्तर नहीं है, मैं आपको बताना चाहता है कि मैं क्या, typeglobs

वे scalars और संदर्भ की तुलना में अधिक गतिशील हैं के साथ अनुभव है क्योंकि एक typeglob का उपयोग कर एक तरह से संकलक कह की तरह है की कोशिश कर सकते "यहां एक संकेत है, खुद को अनुमान लगाएं कि आपको इसके साथ क्या करना है"

एक संदर्भ में हमेशा सख्त प्रकार और लक्ष्य होता है। एक टाइपग्लोब में केवल एक स्ट्रिंग हो सकती है, जो यह इंगित करती है कि यह कुछ चर (नाम) या फ़ाइलहेडल (जैसे STDOUT) या कुछ अन्य मान को इंगित करना है, जो इस स्ट्रिंग

के माध्यम से सुलभ है, कुछ अजीब चीज़ों को पूरा करने के लिए हैकियां हैं, यह टाइपग्लब्स के साथ ही संभव है, इसलिए मुझे लगता है कि मॉर्डर्न परल में भी वे महत्वपूर्ण हैं

1

पर्लगेट्स के बारे में जानने के लिए चित्रित पर्लग्स एक सुलभ तरीका है।

http://www.cpan.org/authors/id/GAAS/illguts-0.09.pdf

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

पुनश्च: आप समझते हैं के लिए इच्छुक में सराहनीय हैं - यह भविष्य :)

+0

टूटी हुई लिंक। :( – badp