【问题标题】:Dart extension: don't access members with 'this' unless avoiding shadowingDart 扩展:除非避免阴影,否则不要使用“this”访问成员
【发布时间】:2020-01-05 12:04:44
【问题描述】:

我正在学习使用新的 Dart 扩展方法。

我正在这样做:

extension StringInsersion on StringBuffer {

  void insertCharCodeAtStart(int codeUnit) {
    final end = this.toString();
    this.clear();
    this.writeCharCode(codeUnit);
    this.write(end);
  }

  int codeUnitAt(int index) {
    return this.toString().codeUnitAt(index);
  }
}

这样我就可以做这样的事情了:

myStringBuffer.insertCharCodeAtStart(0x0020);
int value = myStringBuffer.codeUnitAt(2);

但是,我收到以下 lint 警告:

除非避免屏蔽,否则不要使用 this 访问成员。

我应该做一些不同的事情吗?

【问题讨论】:

    标签: dart this warnings extension-methods


    【解决方案1】:

    您收到的警告意味着以下内容:
    无需使用关键字this 引用当前实例。一切都将在不引用当前实例的情况下工作,因为静态扩展方法本身充当可扩展类型的实例方法。

    简单地说,只需从代码中删除对当前实例的引用即可。

    从这里:

    final end = this.toString();
    

    到这里:

    final end = toString();
    

    【讨论】:

    • 我更喜欢在编写扩展方法时看到this。我理解为什么 linter 会这样做,但我希望在扩展方法中有一个可以忽略的异常。如果您在这种情况下不使用它,似乎缺少某些东西。
    • @jaredbaszler 这个选项在包pub.dev/packages/pedanticgithub.com/google/pedantic/blob/master/lib/…dart-lang.github.io/linter/lints/unnecessary_this.html中开启。不能全局禁用,但可以在本地禁用。
    • 感谢您的信息 - 我只是为我的扩展方法文件将其关闭,并且效果很好。只是个人喜好。
    • @jaredbaszler 是的。分别为每个文件。不适用于整个项目。
    【解决方案2】:

    这是一种风格,基于 Dart 的指南。 https://dart-lang.github.io/linter/lints/unnecessary_this.html 中有示例。 你可以在https://dart.dev/guides/language/effective-dart/style找到更多关于风格的信息。

    【讨论】:

      猜你喜欢
      • 2013-11-05
      • 2021-04-05
      • 2018-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多