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

在Dart中,如果不使用',是否使用dynamic或Object注释函数返回值;我不知道';s型?,dart,Dart,如果我有一个返回未知类型的值的函数,我是使用表示任何对象的动态,还是使用表示所有其他类型的祖先的对象 对于参数,而不是返回值,将讨论此问题 我应该如何注释返回值以及为什么?Dart工程师Bob Nystrom写道: 返回类型是这个问题上一个有趣的转折点。对于参数类型,指导原则非常简单: 如果使用Object作为参数类型,则表示“我的方法将安全地接受任何对象,并且仅将其用于所有对象都支持的toString()之类的内容” 如果您使用动态(或不使用任何内容)作为参数类型,则表示“Dart的类型系统无

如果我有一个返回未知类型的值的函数,我是使用表示任何对象的
动态
,还是使用表示所有其他类型的祖先的
对象

对于参数,而不是返回值,将讨论此问题


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

Dart工程师Bob Nystrom写道:

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

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

  • 如果您使用
    动态
    (或不使用任何内容)作为参数类型,则表示“Dart的类型系统无法轻松表示我在此处接受的类型”或“我不想注释”

  • 翻来覆去是很棘手的。对于返回类型,我想
    Object
    会说“在自己进行类型测试之前,最好不要调用
    toString()
    或所有对象支持的其他东西以外的任何东西”,其中
    dynamic
    的意思是“我们不能很容易地对其进行注释,所以您和我最好只知道我们在做什么”

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

    不管它值多少钱,在许多情况下,即使返回对象,也不必强制转换。当您使用类型注释初始化局部变量时,Dart允许隐式向下转换。因此,您可以:

    objectfoo()=>123;
    main(){
    int x=foo();//隐式向下转换。无类型警告。
    }
    

    我想在这种情况下,我可能会做
    dynamic
    。我认为这表达了“我不知道返回的是什么类型,但您应该”比
    对象

    更好您的答案非常有用,但您的示例不正确,因为这不是
    Dart语言
    。在Dart表达式中
    int foo()不是有效的表达式。可能是您想要写入
    inti=foo()