Dart String Iterable接口

时间:2014-08-19 02:44:11

标签: string dart iteration iterable

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

2 个答案:

答案 0 :(得分:3)

也许不像你想要的那样简洁

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

答案 1 :(得分:2)

回答“为什么”:

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

虽然String可以被视为List个字符(但是Dart没有字符类型,所以它实际上是“单字符字符串列表”),不是它的主要用法,而且Iterable也会混淆实际的String方法。

更好的解决方案是拥有List的{​​{1}} 视图。这很容易做到:

String

如果库暴露了用于制作UnmodifiableListView的import "dart:collection"; class StringListView extends ListBase<String> with { final String _string; StringListView(this._string); String operator[](int index) => _string[index]; int get length => _string.length; void set length(int newLength) { throw new UnsupportedError("Unmodifiable"); } void operator[]=(int index, String v) { throw new UnsupportedError("Unmodifiable"); } } ,那会更容易。