我想制作一个返回Range
或由多个any Junction
组成的Ranges
的函数。
例如:
sub foo (Range $a, Range $b) {
if $a.min <= $b.max && $b.min <= $a.max {
($a.min < $b.min ?? $a.min !! $b.min)..($a.max < $b.max ?? $a.max !! $b.max)
} else {
($a|$b)
}
}
是否有一种简单的方法可以向子项添加Type约束,使其可以返回
Range
或Junction
?我的想法包括
Any
。 但是,如果有人可以想到一种更简单的方法。
最佳答案
只需创建一个容纳两个结果的subset,然后将其当作类型使用即可。
请注意,由于Junction不是Any的子类型,因此必须将其标记为Mu。
(Junction特别不能是Any并按其方式工作)
my subset Range-or-Junction of Mu where Range|Junction;
proto sub foo ( Range, Range --> Range-or-Junction ) {*}
multi sub foo (Range $a,Range $b where $a.min ~~ $b || $a.max ~~ $b --> Range){
# note that this is wrong as it doesn't takes into consideration
# :excludes-min or :excludes-max
min($a.min,$b.min) .. max($a.max,$b.max)
}
multi sub foo (Range $a,Range $b --> Junction){
$a | $b
}
关于raku - Perl6中的多种可能的输出类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51285659/