不同的控制流语句可以有相同的标题
Different control flow statement can have the same title
有 2 个不同的嵌套循环,每个循环都有一个 break 语句,用于在特定条件下中断外部循环。
我想知道如果我将 2 个外部循环标记为相同的标题,这是否会引发 break 语句的混淆?
然后我尝试了以下代码片段
//#1
outterLoop: for x in 1...3 {
innerLoop: for y in 1...3 {
if x == 3 {
break outterLoop //break the "outterLoop"
} else {
print("x: \(x), y: \(y)")
}
}
}
//#2
outterLoop: for a in 1...3 {
innerLoop: for b in 1...3 {
if b == 3 {
break outterLoop //break the "outterLoop"
} else {
print("a: \(a), b: \(b)")
}
}
}
事实证明代码工作正常,没有出现 re-declaration 问题。我认为这可能与范围主题有关。 first break只能看到#1[=32中的outterLoop =] 代码块和 second break 只能在它所在的范围内看到 outterLoop,AKA , #2 代码块。结果,invisible scope限制了inner break可以的变量"see"
问:我理解的对吗?如果不是,请纠正我。即使我没有错,我相信我使用了非正式和不精确的描述。如果您能给我一个更正式和准确的描述,那就太好了。
非常感谢
“The scope of a labeled statement is the entire statement following the statement label. You can nest labeled statements, but the name of each statement label must be unique.”
Excerpt From: Apple Inc. “The Swift Programming Language (Swift 2.2).” iBooks. https://itun.es/de/jEUH0.l
第一个outterLoop:
标签的范围是第一个for循环,
第二个 outterLoop:
标签的范围是第二个
for循环。
因此第一个循环里面的break outterLoop
只能引用
到第一个 outterLoop:
标签,同样适用于
第二个循环。
这与 C 不同,其中 goto
语句及其目标标签
只需要在同一个函数中,因此不需要两个
可以在同一个函数中定义同名标签。
你是对的,标签的范围仅限于它所标签的语句。来自 Swift 2.2 语言参考:
The scope of a labeled statement is the entire statement following the
statement label. You can nest labeled statements, but the name of each
statement label must be unique.
这很直观,因为您只能标记循环、if
语句和 switch
语句,并且标签的唯一用途是跳出该语句或继续与它的下一次迭代。因此,标签在其标记的语句之外可见是没有用的。
有 2 个不同的嵌套循环,每个循环都有一个 break 语句,用于在特定条件下中断外部循环。
我想知道如果我将 2 个外部循环标记为相同的标题,这是否会引发 break 语句的混淆?
然后我尝试了以下代码片段
//#1
outterLoop: for x in 1...3 {
innerLoop: for y in 1...3 {
if x == 3 {
break outterLoop //break the "outterLoop"
} else {
print("x: \(x), y: \(y)")
}
}
}
//#2
outterLoop: for a in 1...3 {
innerLoop: for b in 1...3 {
if b == 3 {
break outterLoop //break the "outterLoop"
} else {
print("a: \(a), b: \(b)")
}
}
}
事实证明代码工作正常,没有出现 re-declaration 问题。我认为这可能与范围主题有关。 first break只能看到#1[=32中的outterLoop =] 代码块和 second break 只能在它所在的范围内看到 outterLoop,AKA , #2 代码块。结果,invisible scope限制了inner break可以的变量"see"
问:我理解的对吗?如果不是,请纠正我。即使我没有错,我相信我使用了非正式和不精确的描述。如果您能给我一个更正式和准确的描述,那就太好了。
非常感谢
“The scope of a labeled statement is the entire statement following the statement label. You can nest labeled statements, but the name of each statement label must be unique.”
Excerpt From: Apple Inc. “The Swift Programming Language (Swift 2.2).” iBooks. https://itun.es/de/jEUH0.l
第一个outterLoop:
标签的范围是第一个for循环,
第二个 outterLoop:
标签的范围是第二个
for循环。
因此第一个循环里面的break outterLoop
只能引用
到第一个 outterLoop:
标签,同样适用于
第二个循环。
这与 C 不同,其中 goto
语句及其目标标签
只需要在同一个函数中,因此不需要两个
可以在同一个函数中定义同名标签。
你是对的,标签的范围仅限于它所标签的语句。来自 Swift 2.2 语言参考:
The scope of a labeled statement is the entire statement following the statement label. You can nest labeled statements, but the name of each statement label must be unique.
这很直观,因为您只能标记循环、if
语句和 switch
语句,并且标签的唯一用途是跳出该语句或继续与它的下一次迭代。因此,标签在其标记的语句之外可见是没有用的。