[英]Curly braces making for loop run only once?
假设我有一个伪代码并且 sum = 3
for i = (1 to 3)
sum = sum + i
return sum
这将返回 9 因为 3+1=4, 4+2=6, 6+3=9
但是当这样做
for i = (1 to 3) {
sum = sum + i
return sum
}
返回的总和是 4? 为什么花括号以某种方式使 for 循环只运行一次?
如果您有以下 C 代码:
for (int i=1; i<=3; ++i)
sum = sum + i;
return sum;
那么你有一种误导性的写作方式
for (int i=1; i<=3; ++i)
sum = sum + i;
return sum;
这是因为上面的代码段都等效于以下内容:
for (int i=1; i<=3; ++i) {
sum = sum + i;
}
return sum;
for
循环的主体是单个语句或块。 大多数语言不认为缩进级别很重要。 (Python 是一个明显的例外。)
相比之下,下面的代码在循环的每一次循环中执行return
,而不是在循环完成后执行:
for (int i=1; i<=3; ++i) {
sum = sum + i;
return sum;
}
当然,它永远不会到达循环的第二遍。
您对第一个循环的缩进具有误导性。 展开两者,很明显发生了什么:
sum = sum + 1
sum = sum + 2
sum = sum + 3
return sum
这个把 6 加到sum
然后返回它。
sum = sum + 1
return sum
sum = sum + 2
return sum
sum = sum + 3
return sum
这个将sum
和加 1,然后返回它。 return
语句结束函数的执行(即使它后面有更多语句,或者它在循环内)。
sum = sum + i
return sum
运行sum = sum + i
3 次。 然后执行return sum
,因为如果循环构造没有大括号,它将只运行一个下一个操作。
这里
for i = (1 to 3) {
sum = sum + i
return sum
}
每个循环迭代都会尝试执行return sum
并且只有第一次迭代才会真正执行它。 下一次迭代将不会执行,因为return
将打破循环。
在第二个示例中,您将 return 语句包含在 for 循环体中,因此在第一次迭代时返回。 在第一个示例中,仅在循环中执行加法/赋值语句,然后返回结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.