2017-07-03 8 views
9

में Bar.pm, मैं एक प्राधिकरण (लेखक) और एक संस्करण के साथ एक वर्ग की घोषणा:मुझे पर्ल 6 मॉड्यूल का संस्करण और अधिकार कैसे मिल सकता है?

class Bar:auth<Camelia>:ver<4.8.12> { 
    } 

अगर मैं एक कार्यक्रम में इसका इस्तेमाल करते हैं, मैं कैसे देख पा रहे हैं एक मॉड्यूल मैं का कौन सा संस्करण इसका उपयोग करके, किसने लिखा, और मॉड्यूल लोडर को यह कैसे मिला? हमेशा के रूप में, दस्तावेज़ीकरण के लिंक महत्वपूर्ण हैं।

इस प्रश्न को perl6-users पर भी पूछा गया था लेकिन एक संतोषजनक उत्तर (या दस्तावेज़ों के लिंक) से पहले मृत्यु हो गई थी।

इस समस्या में एक और झुर्रियां यह है कि बहुत से लोग अपनी कक्षा या मॉड्यूल परिभाषाओं में उस जानकारी को नहीं जोड़ रहे हैं। यह META.json फ़ाइल में दिखाई देता है लेकिन कोड नहीं।

+1

["ऑथ" "ऑथ" है और "लेखक" नहीं है] (https://irclog.perlgeek.de/perl6/2017-04-20#i_14460369)। – raiph

+1

"[auth] जानकारी ... META.json फ़ाइल में दिखाई देती है लेकिन कोड नहीं।" [TimToady, इस समस्या पर] (https://irclog.perlgeek.de/perl6/2017-04-20#i_14460332): "एक मॉड्यूल पैच होने पर एक नया संस्करण मजबूर करें ... मैंने ठीक करने के लिए jnthn को pr pr भेजा एक बग, लेकिन पैचलेवल को बढ़ाने के लिए भूल गया, इसलिए जेएफ़ इसे नहीं देखता है ... आधिकारिक लाइब्रेरी में स्थापित होने पर नाम/ver/auth [must] एक अद्वितीय पाठ से मेल खाना चाहिए [OR] एक [क्रिप्टो] हैश को भाग के रूप में शामिल करें पहचान [या] गिट संशोधन ... यह एक दुःस्वप्न होने वाला है यदि आप "सही" संस्करण का नाम नहीं दे सकते जिसे आप अनन्य रूप से ढूंढ रहे हैं "। – raiph

उत्तर

9

(शायद नहीं एक संतोषजनक जवाब है, क्योंकि इस मामले के तथ्य नहीं बहुत संतोषजनक, विशेष रूप से प्रलेखन के राज्य के बारे में, लेकिन यहाँ यह जाता है ...)


हैं मॉड्यूल या वर्ग ए ला class Bar:auth<Camelia>:ver<4.8.12> स्रोत कोड में सीधे संस्करणीकृत किया गया था, तो किसी भी कोड है कि आयात करता है यह यह introspect कर सकते हैं:

use Bar; 

say Bar.^ver; # v4.8.12 
say Bar.^auth; # Camelia 

# ...which is short for: 
say Bar.HOW.ver(Bar); # v4.8.12 
say Bar.HOW.auth(Bar); # Camelia 

टी

  • Metamodel::ClassHOW(हालांकि उस प्रलेखन पेज उन्हें अभी तक का उल्लेख नहीं है)
  • Metamodel::ModuleHOW(हालांकि उस प्रलेखन पेज बिल्कुल अभी मौजूद नहीं है)
  • : वह ver और auth विधियों द्वारा प्रदान की जाती हैं

दुर्भाग्य से, मुझे नहीं लगता कि मेटा-वस्तु वर्तमान में पाने के लिए एक तरीका प्रदान करता है मॉड्यूल/वर्ग का स्रोत पथ।
मैन्युअल चरणों के माध्यम से जा रहा है कि use और require संकलन इकाइयों को लोड होने से, आप कम से कम उपसर्ग पथ (यानी $PERL6LIB या use lib या -I आदि से जो स्थान से लोड किया गया था) पर प्राप्त कर सकते हैं:

my $comp-spec = CompUnit::DependencySpecification.new: short-name => 'Bar'; 
my $comp-unit = $*REPO.resolve: $comp-spec; 
my $comp-repo = $comp-unit.repo; 
say $comp-repo.path-spec; # file#/home/smls/dev/lib 
say $comp-repo.prefix;  # "/home/smls/dev/lib".IO 

$comp-unitCompUnit प्रकार का एक ऑब्जेक्ट है।
$comp-repo एक CompUnit::Repository::FileSystem है।
दोनों दस्तावेज पृष्ठ अभी तक मौजूद नहीं हैं, और $*REPO केवल list of dynamic variables में संक्षिप्त रूप से उल्लेख किया गया है।

if try $comp-unit.distribution.meta -> %dist-meta { 
    say %dist-meta<ver>; 
    say %dist-meta<auth>; 
    say %dist-meta<license>; 
} 
:


मॉड्यूल एक ठीक से सेट-अप distribution का हिस्सा है, तो आप मेटा जानकारी अपने META6.json(as posted by Lloyd Fournier मेलिंग सूची धागा आप का उल्लेख में) में परिभाषित पर प्राप्त कर सकते हैं

+1

मैं अधिक जानकारी में CompUnit सामान का अन्वेषण करना चाहता हूं, लेकिन मुझे लगता है कि यह उत्तर जितना अच्छा हो उतना अच्छा है। मैं मूल रूप से एक ही सामान के साथ आया था। धन्यवाद! –

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