gpt4 book ai didi

roles - Roku中的参数化类型,如何使用运行时值作为参数

转载 作者:行者123 更新时间:2023-12-03 15:29:26 25 4
gpt4 key购买 nike

我想为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的实用方法吗?

最佳答案

实际上,不像我之前说过的那样,您可以在where子句中使用条件而不会出现问题,您只需要将它们括在大括号中即可:

role Zipi[$condition] {
has $.floor is rw where {$_ ~~ $condition}
method foo($x) { $!floor = $x }
}

class A does Zipi[2 < * < 5] {
method bar($x) { $.floor = $x }
}

#my $a = A.new( floor => 10); # error
my $a = A.new( floor => 4); # OK

#$a.foo(10); # error
$a.foo(3); # OK

#$a.bar(0); # error
$a.bar(4); # OK

#$a.floor = 9; # error
$a.floor = 3; # OK
那应该涵盖所有分配类型

关于roles - Roku中的参数化类型,如何使用运行时值作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65041788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com