我不是语言设计师,但我会给出一个有根据的猜测。
里面的子句while()
每次执行循环时都会执行。 (最后多加 1 次。)声明int i = NextNum()
声明一个局部变量。不能多次声明局部变量。
Update
从语义上讲,这应该是可能的。事实上,正如评论中指出的,这在其他语言中是可能的。但是,如果不重写一些主要语法规则,这在 C# 中是不可能的。
局部变量必须在语句中声明。我相信这种语言应该以这种方式分离,因为变量声明并没有真正执行。当您看到一行创建变量并为其赋值的代码时,这实际上只是两个语句的快捷方式。来自ECMA-334 规范 http://www.ecma-international.org/publications/standards/Ecma-334.htm:
这个例子
void F() {
int x = 1, y, z = x * 2;
}
完全对应于
void F() {
int x; x = 1;
int y;
int z; z = x * 2;
}
变量声明部分本身不被“执行”。它只是意味着应该在堆栈上为某种类型的变量分配一些内存。
The while
语句需要一个布尔表达式,但表达式不能由语句组成——如果没有特殊的外壳或新语法。
The for
循环是专门为声明局部变量而设计的,但您会注意到声明部分仅“执行”一次。
这using
语句专门用于声明局部变量(并处理它们)。它也只“执行”一次。
还要考虑到局部变量声明不返回值——它不能返回值,因为它允许您声明多个变量。该语句会返回哪个值?
int x = 1, y, z = x * 2;
上面的语句是一个局部变量声明。它由一个类型和三个组成局部变量声明符。其中每一个都可以选择包含一个“=”标记和一个局部变量初始化器允许以这种方式声明局部变量意味着您需要稍微分解现有语法,因为您需要类型说明符,但要求使用单个声明符以便它可以返回值。
启用此行为也可能会带来负面影响,请考虑while
and do
/while
陈述相反,但平行。作为语言设计者,您是否也启用do
声明局部变量的语句?我不认为这是可能的。您将无法在循环体中使用该变量,因为它尚未初始化(截至第一次运行)。只有 while 语句是可能的,但是这样你就会破坏之间的并行性while
and do
声明。