我进行了修改std.array.array
,使其始终在编译时工作,它看起来像这样:
ForeachType!Range[] array(Range)(Range r)
if (isIterable!Range && !isNarrowString!Range)
{
auto a = appender!(ForeachType!Range[])();
foreach (e; r)
{
a.put(e);
}
return a.data;
}
还有一个用法:
struct Type
{
int[] xs;
this(int[] r) { this.xs = r.array; }
}
enum Type t1 = Type([]);
static if (t1.xs.length) { } // Error: expression null.length is not constant
根据我的理解,whenr
是一个空范围,array()
返回一个null
. null
在这方面,和空数组之间应该有区别吗?
替换return a.data;
为确实array()
可以return a.data.length ? a.data : [];
解决问题,所以我想有区别吗?
问题是这只发生在构造函数中。以下不会产生错误:
enum int[] t1 = iota(0,0).array;
static if (t1.length) { }
null
所以我想和之间没有区别[]
?我很困惑。