2016-01-07 17 views
9

Я читаю эту фантастическую introduction to Perl6 и наткнулся на довольно интересный термин:Что такое twigil в Perl6?

Обратите внимание на !twigil означает «это частное к классу».

class ScoreKeeper { 
    has %!player-points; 
} 

Я знаю, что в Perl5 sigils are. Но что такое twigil?

Это просто фантастический способ сказать, что есть два сигила, которые добавляют имя атрибута/переменной?

ответ

9

Проектные документы S02 и S99 как говорить о twigils. (Акцент мой).

Обычные сигилы обозначают обычно скользящие переменные, либо лексические, либо . Как ни странно контекстные переменные включают вторичную сигилу (а twigil), что указывает на то, что какое-то странное обзорного переменная при условии: [...]

Так что это вторичный сигила или скорее второй sigil. Объявление $*foo не объявит $foo.

my $*foo = 1; 
say $foo; 

Это даст переменной '$ Foo' не объявлен в ....

+3

Я хотел бы добавить, что _lizmat_ на irc.perl.org помог мне понять концепцию. – simbabque

8

Это, кажется, связано с переменной обзорного:

Twigils влияние на область видимости переменной ...

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

От doc.perl6.org:

Атрибуты - это переменные, которые существуют на один экземпляр класса. Они могут быть доступны непосредственно из класса через:

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

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

Обратите внимание, как атрибуты объявлены как $.x и $.y, но по-прежнему доступны через $!x и $!y. Это связано с тем, что в Perl 6 все атрибуты являются частными и могут быть непосредственно доступны в классе, используя $!attribute-name. Perl 6 может автоматически генерировать методы доступа для вас. Дополнительные сведения об объектах, классах и их атрибутах см. В разделе object orientation.

Публичные атрибуты имеют . twigil, частные - ! 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

Ничего себе, есть надпись на них в документации! – Zaid

 Смежные вопросы

  • Нет связанных вопросов^_^