据我了解,您只能通过值本身对子集进行参数化
subset MoreThanZero where * > 0
但是,有没有一种直接的方法可以实现这样的东西?
subset MoreThan[\x] where * > x
然后声明
my MoreThan[1000] $thousand-plus
也许是一种回旋方式是使用parameterized roles,但是我正在考虑一种更直接的方法。有一个吗?
最佳答案
可能最简单的选择是创建一个提供自定义parameterize
方法的类型,然后使用MOP基于该方法构造一个子集类型:
class MoreThan {
method ^parameterize(Mu, $limit) {
Metamodel::SubsetHOW.new_type:
name => "more than $limit",
refinee => Numeric,
refinement => * > $limit
}
}
然后这样:
my MoreThan[0] $x = 1;
say $x;
my MoreThan[2] $y = 3;
say $y;
$y = 1;
产生:
1
3
Type check failed in assignment to $y; expected more than 2 but got Int (1)
in block <unit> at ss.p6 line 14
关于types - 参数化子集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55265205/