Perl 6 面向对象编程与模块使用详解
1. 角色的使用
Perl 6 系统在运行时容器的行为方面非常灵活,其中一个显著的特性是可以使用 but 操作符将角色混入值中。例如:
role Card {
method Str(::T:) {
when T ~~ Str {
my @pair = self.comb;
return @pair[0] ~ " of " ~ @pair[1..*].join("");
}
when T ~~ Pair {
return self.value ~ " of " ~ self.key;
}
}
}
my $deuce = "2♠" but Card;
say $deuce.Str; # 2 of ♠
my $ace = :Bastos("As") but Card;
say $ace.Str; # As of Bastos
but 操作符将其左边的值与右边的角色、对象或类混合。在上述代码中,通过混入 Card 角色,为简单的标量赋予了一个将其转换为字符串的统一接口,而无需定义新的类型。
如果混入的是简单对象(如标量),会创建一个匿名角色。例如:
my $deuce = "2♠" but 2;
my $ace = "Ace ♠"
超级会员免费看
订阅专栏 解锁全文
69

被折叠的 条评论
为什么被折叠?



