Perl 6 / все про what

Еще раз о скобках

В Perl 6 при вызове функции запрещено ставить пробел между ее именем и открывающей скобкой. В некоторых случаях такое требование может вызвать недоумение, однако существуют случаи, когда дополнительный пробел изменяет смысл написанного:

say 3.14.WHAT;
say (3.14).WHAT;

Первые две строки печатают одно и то же — действительный тип числа 3,14: Rat.

Однако, если убрать пробел, то метод WHAT оказывается примененным к результату выполнения функции say().

say(3.14).WHAT;
(say(3.14)).WHAT;

Оба примера напечатают 3.14,  то есть будет выполнена функция say(), а результат работы метода WHAT останется неиспользованным. Во втором случае дополнительные скобки не меняют семантику, но делают код более прозрачным.

what, parentheses, function, invoke — 15 апреля 2007

WHAT

Метод WHAT возвращает название класса, к которому принадлежит объект.

Метод применим как к переменным предопределенных типов, так и к переменным, которые являются экземплярами пользовательских классов.

Например:

class A
{
}
my A $a;
say $a.WHAT;

Вызов $a.WHAT вернет строку A, поскольку переменная $a как раз и является экземпляром этого класса.

Следует иметь в виду, что класс переменной не обязательно остается неизменным на протяжении работы программы. Например:

my $var = 1;
say WHAT $var;
$var = 1.2;
say WHAT $var;
$var = "1.2";
say WHAT $var;

Три обращения к методу WHAT напечатают соответственно Int, Rat и Str.

what, variable, class — 15 апреля 2007