何时在Dart中使用num
我是Dart新手,我可以看到Dart有何时在Dart中使用num,dart,Dart,我是Dart新手,我可以看到Dart有num,它是int和double的超类(只有这两个,因为将num子类化为其他任何类都是编译时错误) 到目前为止,我看不到使用num而不是int或double的任何好处,是否有num更好或更值得推荐的情况?或者只是为了避免考虑数字的类型,这样编译器就可以决定我们的数字是int还是double 在Dart 2.1之前: 假设你需要定义一个双变量,比如 double x ; 如果您将x定义为双精度,当您将其指定给其值时,您必须指定它,例如9.876 x = 9.
num
,它是int
和double
的超类(只有这两个,因为将num
子类化为其他任何类都是编译时错误)
到目前为止,我看不到使用num
而不是int
或double
的任何好处,是否有num
更好或更值得推荐的情况?或者只是为了避免考虑数字的类型,这样编译器就可以决定我们的数字是int
还是double
在Dart 2.1之前:
假设你需要定义一个双变量,比如
double x ;
如果您将x定义为双精度,当您将其指定给其值时,您必须指定它,例如9.876
x = 9.876;
到目前为止还不错
现在你需要给它赋值,比如说9
你不能这样编码
x = 9; //this will be error before dart 2.1
所以你需要像这样编码
x = 9.0;
但是如果你把x定义为num
你可以用
x = 9.0;
及
因此,在dart中避免整数和双精度类型之间的类型不匹配错误是一种方便的方法
两者都有效
这是Dart 2.1之前的情况,但仍有助于解释该概念
检查可能与之相关不确定这是否对任何人有用,但我只是遇到了一个案例,在某种程度上我需要
num
我定义了一个实用函数,如下所示:
T maximumByOrNull(可编辑它,K键(T),){
我没有空
无效的
:it.reduce((a,b)=>键(a)。与(键(b))相比>0?a:b);
}
像这样调用它
eldest=maximumByOrNull(学生)=>s.age);
…当age
是int
时,由于int
本身不实现可比性
,导致了问题
void main() {
final a = <int>[1,3,5];
final b = <double>[ 0.5, 0.8, -5.0];
print(a.min);
print(b.max);
}
因此,Dart无法在调用maximumByOrNull
时推断类型K
但是,num
确实实现了compariable
。如果我指明:
eldest=maximumByOrNull(学生(s)=>s.age作为num);//这
最年长的=最大年龄(学生(s)=>s.age);//还是这个
投诉消失了
一句话:当
int
和double
本身不执行时,似乎num
实现了compariable
,有时这会给通用函数带来麻烦。num的一个好的用例是使用int
和double
的扩展
void main() {
final a = <int>[1,3,5];
final b = <double>[ 0.5, 0.8, -5.0];
print(a.min);
print(b.max);
}
例如,我在List
中包含扩展MinMax
,该扩展提供了gettermin
和max
extension MinMax on List<num>{
/// Returns the maximum value or `null` if the list is empty.
num get max {
return (isNotEmpty)
? fold<num>(0, (prev, current) => (prev > current) ? prev : current)
: null;
}
/// Returns the minimum value or `null` if the list is empty.
num get min {
return (isNotEmpty)
? fold<num>(0, (prev, current) => (prev < current) ? prev : current)
: null;
}
}
所以在Dart 2.1之后没有什么好处?我不这么认为,但我现在无法在脑海中找到实际的使用情况:)在你的例子中,
9
将被解释为双9.0
,但我不确定num
是否也这样做。可以使用num
的一种情况是Javascript互操作,因为JS没有区别。考虑到Dart最初是作为JS的替代品设计的(但几年前放弃了这个想法),它可能只是为了这个目的才被包括进来的。@Jacob Phillips num将9解释为int 9,这就是num的目的,这就是为什么它的混合类型。我认为你对Dart和JS的看法是正确的。