Dart “为什么?”&引用;。leftPad(0)产生与“0”相同的结果&引用;。左键盘(1)?

Dart “为什么?”&引用;。leftPad(0)产生与“0”相同的结果&引用;。左键盘(1)?,dart,Dart,给定以下代码: String indentation = ""; List < int > indents = [ 0, 1, 2, 4, 6, 8 ]; int length = 0; for ( int i = 0; ( i <= 8 ); i++ ) { if ( indents.contains ( i ) ) { indentation = " ".padLeft(i);

给定以下代码:

  String        indentation = ""; 
  List < int >  indents = [ 0, 1, 2, 4, 6, 8 ];
  int           length = 0;

  for ( int i = 0; ( i <= 8 ); i++ )
    {
    if ( indents.contains ( i ) )
      {
      indentation = " ".padLeft(i);
      length = indentation.length;
      print ( "indent: $i  length: $length  indentation: '$indentation'");
      }
    }
我不认为“.leftPad(0)的结果应该与“.leftPad(1)的结果相同。我可以使用测试零缩进的变通方法。但是,我认为这是一个编译器错误。

这是您的问题:

indentation = " ".padLeft(i);
padLeft
确保字符串开头至少有一定数量的空格,并且仅在必要时添加更多空格。因为你在一个字符串中调用它,它是一个单一的空间(<代码>”/代码>,<代码> pDeLead(1)将看到字符串开始时确实有一个空间,并将考虑它的任务完成。因此,
padLeft(0)
padLeft(1)
将完成相同的工作量-根本没有

更改为
会产生预期的结果:

indent: 0  length: 0  indentation: ''
indent: 1  length: 1  indentation: ' '
indent: 2  length: 2  indentation: '  '
indent: 4  length: 4  indentation: '    '
indent: 6  length: 6  indentation: '      '
indent: 8  length: 8  indentation: '        '

如果代码产生的结果与您的信念不同,您相信什么并不重要。您可以在这里抱怨dart的行为:
“”。padLeft(i)
“”不同。leftPad(0)
@RobertHarvey这不是基于意见的答案。问题是代码中的一个bug导致它做了OP期望之外的事情。@Abion47:看起来你还没有完全阅读他的问题。读最后一句话。
indent: 0  length: 0  indentation: ''
indent: 1  length: 1  indentation: ' '
indent: 2  length: 2  indentation: '  '
indent: 4  length: 4  indentation: '    '
indent: 6  length: 6  indentation: '      '
indent: 8  length: 8  indentation: '        '