微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数组中的多余逗号

如何解决数组中的多余逗号

|
void main(){    
  int[3] arr = [1,2,3,];    
}
多余的逗号合法吗,还是由于编译器错误而未将其标记错误我有许多mixin会在结尾生成带有多余逗号的数组。我想知道是否应该花时间删除它们。 即使这样编译也不会出错:
void main(){    
  int[3] arr = [1,];    
}
    

解决方法

我认为这是合法的,以便允许模板(甚至mixin)以通用方式工作:
template Foo(T) { }                       //What if Foo is empty like this?

auto arr = [1,2,Foo!(int),Foo!(long)];
//         [1,]
它使模板更易于使用,因此您不必对特殊输出进行特殊处理。 一个更现实的例子:
template Iota(size_t start,size_t end)  //All integers in range [start,end)
{
    static if (start < end)
        alias TypeTuple!(start,Iota!(start + 1,end)) Iota;
    else
        alias TypeTuple!() Iota;
}

auto arr1 = [-10,Iota!(0,3)];    // arr is now [-10,1,2]
auto arr2 = [-10,Iota!(a,b)];    // arr is now [-10,a .. b]
现在如果
a
等于
b
会发生什么?然后
arr2
衰减到to7ѭ。     ,它支持多种语言,以允许代码格式,例如:
string[3] arr = [
    \"Some long String\",\"And another\",\"etc,etc,etc\",];
不必省略最后一个值的逗号。 Java也允许这样的数组初始化器。     ,请检查这篇文章 .NET现在像python一样支持数组中的尾部逗号 许多编译器允许在数组中使用逗号结尾。     ,我99%确信单个逗号是设计使然。第二,第三等等?恕我直言,这是设计或实现中的错误,但我不知道是哪一个。     ,几个月前,Walter将这种行为提交到dmd中。以前,有时允许使用逗号结尾,有时甚至不允许,并且如果您在dmd1范围内,那么您会被困住。 现在,至少对于dmd2,尾随逗号在数组文字以及参数列表,参数列表和模板参数列表中应始终有效。 但是,多个尾部逗号是实现中的错误。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。