Subset
— 焉知非鱼Subset
Subset 子集 #
Subset 可用于声明某一类型的子集。
输入一个密码, 要求密码必须满足如下条件:
1、 至少 8 位 2、 必须包含大写字母、小写字母 和 数字
subset Length8 of Str where *.chars < 8;
subset UpCase of Str where none('A'..'Z') ∈ *.comb.Set;
subset LowerCase of Str where none('a'..'z') ∈ *.comb.Set;
subset IntNumber of Str where none('0'..'9') ∈ *.comb.Set;
my $guess = prompt('Enter your password:');
given $guess {
when Length8 { say '密码长度必须为 8 位 以上'; proceed }
when UpCase { say '密码必须包括大写字母'; proceed }
when LowerCase { say '密码必须包含小写字母'; proceed }
when IntNumber { say '密码必须包含数字'; }
}
该程序具有可扩展性, 要增加一种密码验证, 只有添加一个 subset 就好了, 然后在 given/when
里面增加一个处理。
proceed
相当于 continue
, 不像 C 里面的 falling through, Raku 里面的 proceed 在继续执行下一个 when
语句时会计算 when 后面的条件。所以, 只要有 proceed, 则 proceed 后面的那个条件就会被执行。