我可以在Dart中约束一个类型定义到整数范围吗?
就像这个TypeScript中的SO答案
type MyRange = 5|6|7|8|9|10
let myVar:MyRange = 4; // oops, error :)
我想限制:
Dice dice = 0; // warning not compile
Dice dice = 1;
Dice dice = 2;
Dice dice = 3;
Dice dice = 4;
Dice dice = 5;
Dice dice = 6;
Dice dice = 7; // warning not compile
:
typedef Dice = 1|2|3|4|5|6
在Dart中有可能吗?
您可以创建一个类,该类接受一组允许的值,如果不在该集合中的值被分配给其value
成员,则抛出并抛出异常:
class Restricted<T> {
late final Set<T> _validSet;
late T _value;
Restricted(Set<T> validSet) {
_validSet = Set<T>.unmodifiable(validSet);
}
T get value => _value;
set value(T newValue) {
if (!_validSet.contains(newValue)) {
throw RangeError('$newValue is not a valid value');
}
_value = newValue;
}
}
像
一样使用var r = Restricted<int>({1,2,3,4,5,6});
r.value = 2; // Okay
r.value = 0; // throws ValueError
查看在DartPad
上运行的代码你是在询问你心中可能的解决方案,而没有分享实际问题。
如果你用更一般的术语来描述你的实际问题,你可能会在这里找到更好的答案。也许Enum
比限制性int
更适合。