【发布时间】:2014-10-12 01:17:02
【问题描述】:
为什么 Dart String 类不实现可迭代接口?似乎有一个明显的字符串迭代概念,即依次返回每个字符。
【问题讨论】:
标签: string dart iteration iterable
为什么 Dart String 类不实现可迭代接口?似乎有一个明显的字符串迭代概念,即依次返回每个字符。
【问题讨论】:
标签: string dart iteration iterable
也许没有你想要的那么简洁
String s = 'foo';
s.codeUnits.forEach((f) => print(new String.fromCharCode(f)));
s.runes.forEach((f) => print(new String.fromCharCode(f)));
【讨论】:
回答“为什么”:
Iterable 接口是一个相当重量级的接口(许多成员),用于元素集合。
虽然String 可以看作是字符的List(但 Dart 没有字符类型,所以它实际上是“单字符字符串列表”),但这不是它的主要用法,同时作为 Iterable 会混淆实际的 String 方法。
更好的解决方案是拥有String 的List 视图。这很容易做到:
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");
}
}
如果库暴露了用于制作UnmodifiableListView 的UnmodifiableListBase,那就更容易了。
【讨论】:
with。