【发布时间】:2021-03-10 11:58:47
【问题描述】:
我想为 Raku 创建一些 parametrized types;基本上,我想创建一些不同的类,它们的主要区别在于其属性之一的值范围;例如,类代表建筑物的类型,我想为具有 3 层或任何其他楼层数的建筑物设置不同的类。 所以这是我能想到的最好的:
subset Two-Tops of UInt where * <=2;
subset Three-Tops of UInt where * <=3;
role Zipi[ ::Capper ] {
has Capper $.floor;
}
class Capped-at-three does Zipi[Three-Tops] {}
my $capped = Capped-at-three.new( floor => 2 );
say $capped.raku;
当您需要处理许多不同数量的楼层时,这显然是不切实际的(在格拉纳达,我认为他们最多有 10 个楼层,但是……)。这里的问题基本上是你需要在编译时获得子集的信息,所以除非你使用macros(仍然是实验性的),否则你无法使用任何类型的变量。那么你能想出一种实用的方法来为参数的任何值定义这种curried roles吗?
【问题讨论】: