Перевод официальной документации Perl 6.

October 2010 Archives

Данный пост является вырезкой из документации Perl6::Perl5::Differences


Перегрузка

Как встроенные функции, так и операторы являются перегружаемыми подпрограммами и методами [ или мультиподпрограммами и мультиметодами от анг. multi subs and methods], изменение их поведения к определенному типу решается добавлением соответствующих мультиподпрограмм и мультиметодов. Если вы желаете, чтобы данные подпрограммы были доступны глобально, то их нужно установить в область видимости GLOBAL:

multi sub GLOBAL::uc(RussianStr $str, Int $i) { ... }

# "перегрузка" оператора объединения строк:
multi sub infix:<~>(Str $us, RussianStr $them) { ... }

Чтобы осуществить приведение типа (т.е значение одного типа преобразовать в другому), можно просто создать метод с именем типа данных, к которому нужно привести значение.

sub needs_bar(Bar $x) { ... }
class Foo {
    ...
# приведение к типу Bar: method Bar { ... } }

needs_bar(Foo.new); # передача подпрограмме объекта типа Bar

Cемантика списка и хэша

Для того, чтобы написать класс, чьи объекты могут быть отнесены к переменным с сигилом @, нужно реализовать позиционные роли. Аналогично для сигила % нужно реализовать ассоциативную роль. Сигил & подразумевает фрагмент кода, который может быть вызван.

Роли обеспечиваются операторами postcircumfix:<[ ]> ( позиционный, для индексировании массива), postcircumfix: <{ }> (ассоциативный) и postcircumfix:<()> (вызываемый фрагмент кода). Технически это обычные методы с причудливым синтаксисом. Нужно только подкорректировать их для выражения соответствующей семантики.

class OrderedHash does Associative {
    method postcircumfix:<{}>(Int $index) {
        # здесь код, оперирующий отдельными элементами хэша
    }
    method postcircumfix:<{}>(**@slice) {
        # здесь код, оперирующий срезами хэша
    }
    ...
}

my %orderedHash = OrderedHash.new();
say %orderedHash{'a'};

См. подробнее в спецификации [S13]

Изменения в семантике операторов тестирования файлов

Было:    if (-r $file && -x _) { ... } 
Стало:   if $file ~~ :r & :x  { ... }

Операторы тестирования файлов теперь возвращают в качестве результата булево значение. Детальнее об этом см. [S03]: Изменения в операторах Perl

About this Archive

This page is an archive of entries from October 2010 listed from newest to oldest.

September 2010 is the previous archive.

November 2010 is the next archive.

Find recent content on the main index or look in the archives to find all content.