gpt4 book ai didi

dart - 如何声明性地防止函数返回结果?

转载 作者:行者123 更新时间:2023-12-03 02:58:54 25 4
gpt4 key购买 nike

假设这样的条件:

  • 某些操作不提供返回结果的可能性。
  • 此操作声明为回调
  • 不建议使用typedef
  • 提供一些返回结果的操作。
  • 此操作声明为回调
  • 不建议使用typedef

  • 假设这种情况:

    void main() {
    executeVoidOperation(methodNonVoid); // Must throw if method void?
    executeNonVoidOperation(methodVoid); // Must throw if method non-void?
    }

    int methodNonVoid() {
    return 0;
    }

    void methodVoid() {
    }

    void executeVoidOperation(void operation()) {
    operation(); // Must throw if method non-void?
    }

    void executeNonVoidOperation(dynamic operation()) {
    var result = operation(); // Must throw if method void?
    print(result); // Result of void operation? (if such passed as argument)
    }

    显示结果:
    null

    问题(我在哪里错了?):
  • Null是对象。如果null函数无法返回结果(甚至是as result),那么该void从何处出现(null)?
  • Dart中具有不同返回类型的函数被假定为相同(不冲突)的类型吗?
  • 如何在Dart中调用此函数转换?
  • 最佳答案

    executeNonVoidOperation(methodVoid);有效,因为回调定义为dynamic operation()dynamic可以是任何东西,包括void。就像您不指定类型一样。
    null值源自Dart中的一条简单规则。引用自Dart Language Tour:

    All functions return a value. If no return value is specified, the statement return null; is implicitly appended to the function body.



    这意味着每个 void方法始终返回null。如果尝试返回其他内容,则会出现运行时错误(在检查模式下)。
    executeVoidOperation(methodNonVoid);有点棘手-我希望它会引发运行时错误,但似乎该回调被视为 dynamic operation()而不是 void operation()。 Dart编辑器的分析器似乎也这么认为。 Dart团队可能是错误,也可能是设计选择。

    关于dart - 如何声明性地防止函数返回结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17512393/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com