【问题标题】:Dart String Iterable interfaceDart String 可迭代接口
【发布时间】:2014-10-12 01:17:02
【问题描述】:

为什么 Dart String 类不实现可迭代接口?似乎有一个明显的字符串迭代概念,即依次返回每个字符。

【问题讨论】:

    标签: string dart iteration iterable


    【解决方案1】:

    也许没有你想要的那么简洁

    String s = 'foo';
    s.codeUnits.forEach((f) => print(new String.fromCharCode(f)));
    s.runes.forEach((f) => print(new String.fromCharCode(f)));
    

    【讨论】:

      【解决方案2】:

      回答“为什么”:

      Iterable 接口是一个相当重量级的接口(许多成员),用于元素集合。

      虽然String 可以看作是字符的List(但 Dart 没有字符类型,所以它实际上是“单字符字符串列表”),但这不是它的主要用法,同时作为 Iterable 会混淆实际的 String 方法。

      更好的解决方案是拥有StringList 视图。这很容易做到:

      class StringListView extends ListBase<String> {
        final String _string;
        StringListView(this._string);
      
        @override
        String operator [](int index) => _string[index];
      
        @override
        int get length => _string.length;
      
        @override
        set length(int newLength) {
          throw UnsupportedError("Unmodifiable");
        }
      
        @override
        void operator []=(int index, String v) {
          throw UnsupportedError("Unmodifiable");
        }
      }
      

      如果库暴露了用于制作UnmodifiableListViewUnmodifiableListBase,那就更容易了。

      【讨论】:

      • 我更新了代码以删除 linter 警告,但我可能省略了一个 mixin,因为原始版本似乎有一个悬空的 with
      猜你喜欢
      • 2016-12-25
      • 2010-11-25
      • 2020-07-31
      • 1970-01-01
      • 2013-02-28
      • 1970-01-01
      • 1970-01-01
      • 2014-03-31
      • 2014-11-07
      相关资源
      最近更新 更多