2016-01-07 5 views
9

lese ich diese fantastischen introduction to Perl6 und stieß auf einen recht interessanten Begriff:Was ist ein Zweig in Perl6?

Notiere die !twigil bedeutet „das ist privat in die Klasse“.

class ScoreKeeper { 
    has %!player-points; 
} 

weiß ich, was sigils are in Perl5. Aber was ist ein Zweig?

Ist es nur eine phantastische Art zu sagen, dass zwei Sigillen vor dem Attribut/Variablennamen stehen?

Antwort

9

Die Design-Dokumente S02 und S99 sprechen beide über twigils. (Schwerpunkt meiner).

Ordinary sigils indicate normalerweise scoped Variablen entweder lexikalischen oder Paket scoped. Seltsamer scoped Variablen umfasst eine sekundäre sigil (a twigil), die was für seltsamen Scoping zeigt die Variable unter: [...]

So ist es ein Sekundär Sigill oder vielmehr ein zweite sigil. Die Deklaration $*foo wird $foo nicht deklarieren.

my $*foo = 1; 
say $foo; 

Diese Ausbeute wird Variable '$ foo' ist nicht auf ... erklärt.

+3

Ich möchte hinzufügen, dass _lizmat_ auf irc.perl.org mir geholfen hat, das Konzept zu verstehen. – simbabque

8

Es scheint variable Scoping bezogen werden:

Twigils Einfluss auf die Scoping einer Variablen ...

Twigil Scope 
------ ---------------------------------------------- 
none  Based only on declarator 
*  Dynamic 
!  Attribute (class member) 
?  Compile-time variable 
.  Method (not really a variable) 
<  Index into match object (not really a variable) 
^  Self-declared formal positional parameter 
:  Self-declared formal named parameter 
=  Pod variables 
~  The sublanguage seen by the parser at this lexical spot 

http://doc.perl6.org/language/variables#Twigils

7

Von doc.perl6.org:

Attribute sind Variablen, die pro Instanz einer Klasse existieren. Sie können direkt aus der Klasse über zugegriffen werden:

class Point { 
    has $.x; 
    has $.y; 

    method Str() { 
     "($!x, $!y)" 
    } 
} 

Hinweis, wie die Attribute als $.x und $.y deklariert werden, sondern über $!x und $!y noch abgerufen. Dies liegt daran, dass in Perl 6 alle Attribute privat sind und direkt innerhalb der Klasse unter Verwendung von $!attribute-name zugegriffen werden kann. Perl 6 kann jedoch automatisch Zugriffsmethoden für Sie generieren. Weitere Informationen zu Objekten, Klassen und ihren Attributen finden Sie unter object orientation.

Öffentliche Attribute haben die . Twigil, private die ! Twigil.

class YourClass { 
    has $!private; 
    has @.public; 

    # and with write accessor 
    has $.stuff is rw; 

    method do_something { 
     if self.can('bark') { 
      say "Something doggy"; 
     } 
    } 
} 
+1

Wow, da ist eine Ladung davon in der Dokumentation! – Zaid