2017-05-30 7 views
7

पर्ल 5 और मूस में, रैखिक आईएसए या रैखिकीकृत आईएसए कक्षा पदानुक्रमों को समझने में मदद करता है।आप मूल्य के प्रकार पदानुक्रम कैसे दिखाते हैं?

विधि WHAT एक मूल्य के ठोस प्रकार पता चलता है:

> 42.WHAT 
(Int) 

मैं कैसे

> 42.hypothetical-type-hierarchy 
(Int) ┬ is (Cool) ─ is (Any) ─ is (Mu) 
     └ does (Real) ─ does (Numeric) 

की तरह कुछ ... संभवतः प्रत्येक भस्म भूमिका के लिए आगे लाइनों के साथ दिखाते हैं?


संपादित करें: भूमिकाओं

class Beta {} 
role Delta {} 
role Gamma does Delta {} 
role Eta {} 
role Zeta does Eta {} 
role Epsilon does Zeta {} 
class Alpha is Beta does Gamma does Epsilon {} 

# (Alpha) ┬ is (Beta) 
#   ├ does (Gamma) ─ does (Delta) 
#   └ does (Epsilon) ─ does (Zeta) ─ does (Eta) 

my $ai = Alpha.new 
$ai.^mro  # ((Alpha) (Beta) (Any) (Mu)) 

$ai.^roles  # ((Epsilon) (Zeta) (Eta) (Gamma) (Delta)) 
       # flat list, not two-element list of a tuple and triple‽ 
+1

'.WHAT' नहीं करता है कुछ भी नहीं, यह आपको वस्तु वस्तु देता है। किस प्रकार के लिए जिनके पास '.' उनमें कोई' :: 'नहीं है '.gist' कुछ आधा समझदार है। आपको वास्तव में '।^Name' को कॉल करना चाहिए। –

उत्तर

8

आप

> 42.^mro 
((Int) (Cool) (Any) (Mu)) 

साथ मेटा वस्तु क्वेरी कर सकता है के दो स्ट्रैंड के साथ उदाहरण है जहाँ विधि संकल्प आदेश और

> 42.^roles 
((Real) (Numeric)) 
के लिए mro स्टैंड

आप नियंत्रित कर सकते हैं कि :local (केवल कक्षाओं पर उपलब्ध माता-पिता से वंचित भूमिकाओं को छोड़ दें) और :!transitive (भूमिकाओं और कक्षाओं दोनों पर उपलब्ध भूमिकाओं को छोड़कर भूमिकाएं शामिल करें) के माध्यम से कौन सी भूमिकाएं लौटा दी जाती हैं।


निम्नलिखित मिलना चाहिए आप आरंभ:

my $depth = 0; 
for Alpha.^mro { 
    say "is {.^name}"; 
    (sub { 
     ++$depth; 
     for @_ { 
      say ' ' x $depth ~ "does {.^name}"; 
      &?ROUTINE(.^roles(:!transitive)); # recursive call of anon sub 
     } 
     --$depth; 
    })(.^roles(:local, :!transitive)); 
} 

मामूली संशोधनों

role Delta {} 
role Gamma does Delta {} 
role Eta {} 
role Zeta does Eta {} 
role Epsilon does Zeta {} 
class Beta does Gamma {} 
class Alpha is Beta does Gamma does Epsilon {} 

यह उत्पादन का उत्पादन के साथ अपने उदाहरण कोड को देखते हुए

is Alpha 
    does Epsilon 
    does Zeta 
     does Eta 
    does Gamma 
    does Delta 
is Beta 
    does Gamma 
    does Delta 
is Any 
is Mu 
+0

क्षमा करें, मुझे adverb भाग समझ में नहीं आता है। क्या आप मेरे संपादित पोस्ट में दूसरे उदाहरण के साथ उदाहरण दे सकते हैं? – daxim

+1

@ डेक्सिम एन [adverb] (https://docs.perl6.org/language/glossary#Adverb) एक नामित तर्क है जो यह दर्शाता है कि कोई फ़ंक्शन क्या करता है। उदाहरण के लिए, 'ट्रांजिटिव' गुजरने वाली भूमिकाएं 'ट्रांजिटिवली' (http://www.dictionary.com/browse/transitively) हैं। ('! 'का अर्थ है" नहीं ", यानी':! Transitive 'अंग्रेजी क्रियाविधि वाक्यांश" पारगमन से नहीं "के समान है।) तो' $ ai^^ भूमिकाएं (:! Transitive) 'को अपने कोड के साथ दिखाएं' ((एप्सिलॉन) (गामा)) '। – raiph

+1

यह पारिस्थितिकी तंत्र में एक अच्छा उपयोगिता मॉड्यूल की तरह लगता है। *संकेत संकेत* :-) –

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