当你打印对象的时候, 例如 say $x
, Raku 调用 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
,而不是 gist
。你可以在这里看到它:
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"
现在,我们得到了期望的行为。