gpt4 book ai didi

dart - 在 Dart 中,如果我不知道函数的类型,我是否使用 dynamic 或 Object 注释函数返回值?

转载 作者:行者123 更新时间:2023-12-04 11:54:31 26 4
gpt4 key购买 nike

如果我有一个返回未知类型值的函数,我是否使用 dynamic ,代表任何对象,或 Object ,哪个是所有其他类型的祖先?

style guide讨论参数的这个问题,但不讨论返回值。

我应该如何注释返回值以及为什么?

最佳答案

Dart 工程师 Bob Nystrom 写道:

返回类型是这个问题的一个有趣的转折。对于参数类型,指南非常简单:

  • 如果您使用 Object作为参数类型,您是说“我的方法将安全地接受任何对象,并且仅将其用于 toString() 之类的所有对象都支持的内容”。
  • 如果您使用 dynamic (或什么都没有)作为参数类型,您是在说“Dart 的类型系统无法轻松表达我在这里接受的类型”或“我懒得注释”。

  • 翻转 (1) 很棘手。对于返回类型,我猜 Object会说“在自己进行类型测试之前,除了 toString() 或所有对象支持的其他东西之外,您最好不要调用任何东西”,其中 dynamic我认为这意味着“我们无法轻松对此进行注释,因此您和我最好只知道我们在做什么”。

    用户必须将它“转换”为他们希望看到的特定类型,以避免编译器警告并在检查模式下更早地得到错误。

    就其值(value)而言,在许多情况下,即使您返回 Object,您也不必强制转换。当您使用类型注释初始化局部变量时,Dart 允许隐式向下转换。所以你可以这样做:

    Object foo() => 123;

    main() {
    int x = foo(); // Implicit downcast. No type warning.
    }

    我想在这种情况下,我可能会做 dynamic , 尽管。我认为这比 Object 更能传达“我不知道返回什么类型,但你应该”的意思。 .

    关于dart - 在 Dart 中,如果我不知道函数的类型,我是否使用 dynamic 或 Object 注释函数返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15980734/

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