iDe*_*ode 5 dart dart-null-safety
我有:
Future<bool> foo() async => true;
Run Code Online (Sandbox Code Playgroud)
这是允许的:
Future<void> bar() {
return foo(); // Works
}
Run Code Online (Sandbox Code Playgroud)
但这不是:
Future<void> baz() async {
return foo(); // Error
}
Run Code Online (Sandbox Code Playgroud)
在两者中bar,baz我都返回 a Future<bool>,但为什么第一个有效但第二个失败?
注意:这个问题不是关于如何让它工作,而是关于为什么一个有效而另一个无效。
Dart 对于void返回函数有特殊的规则:不允许返回值,因为它被声明为不返回任何值,因此实际上尝试返回值可能是一个错误。
如果没有:也会发生同样的情况Future:
void qux() {
return true; // Error, can't return value from void function
}
Run Code Online (Sandbox Code Playgroud)
给出错误
A value of type 'bool' can't be returned from the function 'qux' because it has a return type of 'void'.
Run Code Online (Sandbox Code Playgroud)
您可以使用return e;语句,但前提是类型e为void,Null或dynamic。(你甚至不应该这样做,这些只是为了使现有代码工作而被允许。)(总是允许使用主体=> e,因为人们喜欢使用它作为 just 的简写{ e; },主要是因为格式化程序将其保留在一个行。我仍然建议使用{ e; }作为函数体void。)
概括地说,对于async具有未来返回类型的函数void,不允许从函数返回实际Future<void> ... async值。因此,您唯一可以退回的东西是void、dynamic、Null、Future<void>、Future<dynamic>和Future<Null>。AFuture<bool>不是其中任何一个。
你应该写的是:
Future<void> baz() async {
await foo();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3678 次 |
| 最近记录: |