为什么 assert 语句没有按预期运行?

时间:2021-02-18 17:57:06

标签: dart

我创建了一些代码来计算字符串中字符出现的次数。在这里

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 语句再次没有捕获大小不正确的字符串,并尝试访问空字符串的第一个代码单元。

这里发生了什么我不明白的事情?

1 个答案:

答案 0 :(得分:2)

这是在禁用断言语句的 dartpad 中运行代码的结果。正在跟踪该问题 here

如果您没有在 dartpad 中运行代码并且遇到此问题,请尝试使用 --enable-asserts 标志运行 dart(请注意,它应该在 dart 之后直接传递,而不是在要运行的文件之后传递。

dart --enable-asserts lib\main.dart

相关问题