Когда вы пробуете печатать объект, например: say $x, Perl 6 вызывает метод gist. Этот метод определен для всех встроенных типов — где-то он вызывает метод Str, где-то perl, а где-то формирует особое представление.
Рассмотрим, как можно воспользоваться этим методом, чтобы сделать свой вариант печати объекта:
class X {
has $.value;
method gist {
'[' ~ $!value ~ ']'
}
}
my $x = X.new(value => 42);
say $x; # [42]
$x.say; # [42]
При обращении к say программа печатает число в квадратных скобках: [42].
Обратите внимание, что при интерполяции в строке, заключенной в двойные кавычки, вызывается другой метод — Str:
say $x.Str; # X<140586830040512> say "$x"; # X<140586830040512>
Если вам требуется кастомная интерполяция, переопределяйте и метод Str:
class X {
has $.value;
method gist {
'[' ~ $!value ~ ']'
}
method Str {
'"' ~ $!value ~ '"'
}
}
my $x = X.new(value => 42);
say $x; # [42]
$x.say; # [42]
say $x.Str; # "42"
say "$x"; # "42"