如果我有一个返回未知类型值的函数,我是否使用dynamic,代表任何对象,或者Object,它是所有其他类型的祖先?
该风格指南讨论了参数的这个问题,而不是返回值.
我应该如何注释返回值以及为什么?
飞镖工程师Bob Nystrom写道:
返回类型是这个问题的有趣转折.使用参数类型,指南非常简单:
如果你Object用作参数类型,你会说"我的方法将安全地接受任何对象,并且仅用于toString()所有对象支持的东西".
如果你使用dynamic(或什么都没有)作为参数类型,你会说"Dart的类型系统不能轻易地表达我在这里接受的类型"或"我没有费心去注释".
翻转(1)周围很棘手.对于返回类型,我想Object会说"在你toString()自己进行类型测试之前,你最好不要调用除了所有对象支持的任何东西",dynamic我认为这意味着"我们不能轻易地注释这一点,所以你和我最好知道我们正在做什么".
用户必须将其"转换"为他们希望看到的特定类型,以避免编译器警告并在检查模式中更早地获得错误.
对于它的价值,在许多情况下,即使你返回Object也不需要进行转换.使用类型注释初始化局部变量时,Dart允许隐式向下转换.所以你可以这样做:
Object foo() => 123;
main() {
int x = foo(); // Implicit downcast. No type warning.
}
Run Code Online (Sandbox Code Playgroud)
我想在这种情况下,我可能会这样做dynamic.我认为这传达了"我不知道这种类型会返回什么类型,但你应该"比...更好Object.
| 归档时间: |
|
| 查看次数: |
859 次 |
| 最近记录: |