Подпрограммы и их сигнатуры являются объектами. Кроме использования, имеется возможность некоторые их подробности и детали параметров:
sub logarithm(Numeric $x, Numeric :$base = exp(1)) {
log($x) / log($base);
}
my @params = &logarithm.signature.params;
say @params.elems, ' parameters';
for @params {
say "Name: ", .name;
say " Type: ", .type;
say " named? ", .named ?? 'yes' !! 'no';
say " slurpy? ", .slurpy ?? 'yes' !! 'no';
say " optional? ", .optional ?? 'yes' !! 'no';
}
2 parameters
Name: $x
Type: Numeric()
named? no
slurpy? no
optional? no
Name: $base
Type: Numeric()
named? yes
slurpy? no
optional? yes
Сигил & и следующее за ним имя подпрограммы представляют собой объект соответствующей подпрограммы. &logarithm.signature возвращает сигнатуру подпрограммы, а метод .params у сигнатуры - список параметров в виде объектов типа Parameter. Объекты Parameter описывают детали каждого параметра в отдельности
Таблица 4.2. Методы класса Parameter
| method | description |
|---|---|
| name | Имя связанной лексической переменной |
| type | Номинальный тип |
| constraints | Все дальнейшие ограничения типа |
| readonly | "Истина", если параметр is readonly |
| rw | "Истина", если параметр is rw |
| copy | "Истина", если параметр is copy |
| named | "Истина", если параметр должен быть передан как именованный |
| named_names | Список названий именованных параметров |
| slurpy | "Истина", если параметр slurpy (захватывает) |
| optional | "Истина", если параметр необязательный |
| default | Замыкание возвращающее значение по умолчанию |
| signature | Вложенная сигнатура для установки привязок аргументов |
Анализ сигнатур позволяет создавать интерфейсы, которые могут анализировать ожидаемые сигнатурами данные, а затем передавать правильные данные в подпрограммы. Например, возможно создание программы-генератора web форм, которая будет создавать интерфейс пользователем, проверять введенные данные и затем обрабатывать их на основе информации полученной с помощью анализа сигнатур. Подобный подход позволяет также облегчить создание инструментов для работы в командной строке, обеспечивая справочную информацию о параметрах ввода.
Помимо этого, черты позволяют связать с параметрами дополнительные данные. Эти метаданные выходят далеко за границы материала о подпрограммах, сигнатурах и параметрах.