繁体   English   中英

使 for 循环只运行一次的花括号?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM