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

时间:2013-04-12 20:59:34

标签: dart

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

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

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

1 个答案:

答案 0 :(得分:7)

飞镖工程师Bob Nystrom写道:

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

  1. 如果您使用Object作为参数类型,则表示“我的方法将安全地接受任何对象,并仅将其用于所有对象都支持的toString()之类的内容”。 / p>

  2. 如果你使用dynamic(或什么都没有)作为参数类型,你会说“Dart的类型系统不能轻易表达我在这里接受的类型”或“我没有打扰注释“。

  3. 翻转(1)周围很棘手。对于返回类型,我猜Object会说“除了toString()之外你最好不要调用任何东西,或者在自己进行类型测试之前所有对象都支持其他东西”,其中dynamic我认为是什么意思“我们不能轻易地注释这一点,所以你和我最好知道我们在做什么”。

    用户必须将其“转换”为他们希望看到的特定类型,以避免编译器警告并在检查模式中提前收到错误。

    对于它的价值,在许多情况下,即使你返回Object也不需要进行转换。使用类型注释初始化局部变量时,Dart允许隐式向下转换。所以你可以这样做:

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

    我想在这种情况下,我可能会做dynamic。我认为这表达了“我不知道这种类型会返回什么类型,但你应该”优于Object