Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
В объявлении наличие или отсутствие пробела не имеет значения.
Одновременно с именами задаются и структурные типы формальных параметров (это было возможно и ранее, но не так наглядно).
Параметры функции могут содержать модификаторы (traits), изменяющие их поведение. В частности, модификатор is rw дает возможность перезаписывать переданный аргумент:
# sub-rw.p6
my $string = "before";
callme($string);
say $string; # after
sub callme ($value is rw)
{
$value = "after";
}
Попытка изменить аргумент без такого модификатора будет пресечена компилятором:
*** Can't modify constant item: VRef <Scalar:0x1c6cfc4>
at sub-rw.p6 line 9, column 9-25
Чтобы произвольно изменять значение, требуется указать модификатор is copy.
При вызове функции по умолчанию не происходит «сворачивания» всех переменных в общий массив. Например, теперь удается безболезненно передать в функцию два массива, нигде явно не указывая их длину:
# sub-slurp.p6
my @odd = (1, 3, 5);
my @even = (2, 4, 6);
view(@odd, @even);
sub view (@a, @b)
{
say @a;
say "&";
say @b;
}
Необязательные параметры (которые должны идти последними в списке) помечают вопросительным знаком. Дополнительно можно указать значение по умолчанию:
# sub-optional.p6
callme(1, 2); # 1, 2
callme(3); # 3, 4
sub callme ($a, $b? = 4)
{
say "$a, $b";