56. Что такое gist в Perl 6

Когда вы пробуете печатать объект, например: 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"