【问题标题】:Dart 2: Difference between Future<void> and Future<Null>Dart 2:Future<void> 和 Future<Null> 之间的区别
【发布时间】:2018-03-21 15:17:44
【问题描述】:

有一个不返回值的异步函数,理想的返回类型Future&lt;Null&gt;Future&lt;void&gt; 是什么?或者更具体地说,使用两者有什么区别?两者都是合法的,在这两种情况下,函数的返回值都是Future,它解析为null。以下代码将null 打印两次:

import 'dart:async';

Future<void> someAsync() async {}
Future<Null> otherAsync() async {}

main() {
    someAsync().then((v) => print(v));
    otherAsync().then((v) => print(v));
}

【问题讨论】:

    标签: asynchronous dart future


    【解决方案1】:

    Null 类型只允许值null

    void 类型允许任何类型的值,但表示不应使用该值。

    我还不清楚工具支持将如何对待void。可能会有 linter 规则提示或警告使用 void 值。

    之前使用Null 代替void,因为void 仅支持作为方法/函数的返回类型。

    【讨论】:

    • 使用void接受任何返回值违反了dart 2强类型的策略,所以我想将来返回一个带有Future&lt;void&gt;的值是不允许的,@987654332也是@ 作为一种类型没有意义,所以我的猜测是它将来会消失。很好的答案,谢谢。
    • No void 将变得更加普遍。 void 允许任何返回值,但是调用者如果使用返回值会收到警告。 Dart 试图避开你,如果void 不允许任何值,() =&gt; foo() 会因为隐含的return 而导致错误。另请参阅来自 eernstg 的 this comment
    猜你喜欢
    • 2021-10-27
    • 2021-07-11
    • 2018-02-22
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 2021-05-26
    • 2019-10-08
    相关资源
    最近更新 更多