String DartPad允许字符串迭代

String DartPad允许字符串迭代,string,dart,iteration,String,Dart,Iteration,我想知道为什么下面的代码会在上打印测试的每个字母,并在终端上引发异常。我的意思是,Dart中的字符串是不可编辑的,所以我不明白这在DartPad上是如何工作的;我希望那里也会有例外。有什么想法吗 void main() { var test = 'test'; for (var t in test) { print(t); } } 我用Dart 1.14.0对此进行了测试,但在以前的版本中也出现了这种情况。我想这是因为Dart被转换为JavaScript,JavaScrip

我想知道为什么下面的代码会在上打印
测试的每个字母,并在终端上引发异常。我的意思是,Dart中的字符串是不可编辑的,所以我不明白这在DartPad上是如何工作的;我希望那里也会有例外。有什么想法吗

void main() {
  var test = 'test';
  for (var t in test) {
    print(t);
  }
}

我用Dart 1.14.0对此进行了测试,但在以前的版本中也出现了这种情况。

我想这是因为Dart被转换为JavaScript,JavaScript支持对字符串进行迭代,并且可能出于性能原因,没有额外的检查来阻止它

什么是错误,是分析仪没有显示警告,即使
test
被明确键入为
String

void main() {
  String test = 'test';
  for (var t in test) {
    print(t);
  }
}
当我启用强模式时,我会得到一个警告

my\u project/.analysis\u options

analyzer:
  strong-mode: true
类型检查失败:测试(字符串)不是Iterable类型

两者皆有

var test = 'test';
// or 
String test = 'test';

您需要使用“共享”功能为您的DartPad生成唯一的URL。该链接指向默认的条目页面。我不打算共享我的DartPad,但我想它可以为每个人节省一些复制粘贴。我将更新URL。即使代码被转换为JavaScript,也不应该发生这种情况。在我看来,Dart和DartPad的行为应该完全相同。这是一个美好的愿望;-)Dart团队努力接近目标,但和往常一样,他们需要做出妥协,主要是为了表现。当然,创建一个bug报告也可以。可能是这件事刚刚通过。谢谢,我会的。:),如果有人想跟随。