gpt4 book ai didi

dart - 在 Dart 的强模式中,我可以从函数定义中去掉类型吗?

转载 作者:行者123 更新时间:2023-12-01 06:32:53 26 4
gpt4 key购买 nike

例如,我只想能够写:

class Dog {
final String name;

Dog(this.name);

bark() => 'Woof woof said $name';
}

但有 #Dog.bark的类型定义为 () => String .

这以前在 Dart 1.x 中是不可能的,但我希望类型推断可以节省一天的时间,避免在返回类型可推断的情况下输入微不足道的函数(与今天的闭包相同?)

最佳答案

语言团队目前没有任何计划根据他们的 body 来推断成员的返回类型。肯定有这样的情况会很好,但也有其他情况(如递归方法)不起作用。

通过推理,我们必须平衡一些对立的力量:

  • 拥有处理许多不同情况的智能推理,以尽可能减轻打字痛苦。
  • 有一些显式的类型注释,以便像 API 边界这样的东西是明确定义的。如果您更改了方法主体并更改了推断的返回类型,那么现在您已经对 API 进行了潜在的破坏性更改。
  • 在推断的代码和不是的代码之间有一个简单的界限,这样用户就可以轻松地推断出他们的代码的哪些部分是类型安全的,哪些需要更多的关注。

  • 您提出的案例正好处于这些交叉点。就个人而言,我倾向于不进行推断。我喜欢我的类 API 无论如何都非常明确地键入,因为我发现它使它们更易于阅读和维护。

    请记住,在类似的情况下,推理确实发挥了作用:
  • Dart 将根据匿名函数的主体推断其返回类型。这使得诸如 lambdas 之类的东西传递给 map()做你想做的。
  • 它将从它覆盖的方法推断方法覆盖的返回类型。您不需要在 Beagle.bark() 中注释返回类型这里:
    class Dog {
    String bark() => "Bark!";
    }

    class Beagle extends Dog {
    final String name;

    Dog(this.name);

    bark() => 'Woof woof said $name';
    }
  • 关于dart - 在 Dart 的强模式中,我可以从函数定义中去掉类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42012861/

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