如何解决数组中的多余逗号
|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 举报,一经查实,本站将立刻删除。