约束类型定义为Dart中的整数范围



我可以在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更适合。

最新更新