我创建了一些代码来计算字符串中字符出现的次数。在这里
void main() {
print("1100011110000011".count(SingleChar('1')));
print("1100011110000011".count(SingleChar('1135465321')));
print("1100011110000011".count(SingleChar('')));
}
class StringCountArg{}
class CodeUnit extends StringCountArg{
int codeUnit;
CodeUnit(this.codeUnit);
}
class SingleChar extends StringCountArg{
String string;
SingleChar(this.string): assert(string.length == 1);
}
extension CharCounter on String {
int count<T extends StringCountArg>(T r){
if(r is CodeUnit){
return codeUnits.where((cu) => cu == r.codeUnit).length;
}else if(r is SingleChar){
return codeUnits.where((cu) => cu == r.string.codeUnitAt(0)).length;
}
return 0;
}
}
我创建了一个名为 StringCountArg 的类作为参数的基本类型(因为我希望能够提供一个代码单元,或者一个已经包含单个字符的字符串)。
main 中的第一行执行得很好。返回 8,因为有 8 个“1”字符。
第二行没有按预期执行。我希望 assert
语句能够捕获长字符串,但它没有。
第三行失败,因为 assert 语句再次没有捕获大小不正确的字符串,并尝试访问空字符串的第一个代码单元。
这里发生了什么我不明白的事情?
答案 0 :(得分:2)
这是在禁用断言语句的 dartpad 中运行代码的结果。正在跟踪该问题 here
如果您没有在 dartpad 中运行代码并且遇到此问题,请尝试使用 --enable-asserts
标志运行 dart(请注意,它应该在 dart 之后直接传递,而不是在要运行的文件之后传递。
dart --enable-asserts lib\main.dart