Метка цикла
Метка цикла в Rust - это именованный идентификатор, который
ставится перед циклом loop, while или
for. Метка записывается в формате 'label
(апостроф и имя) и позволяет адресно применять операторы
break и continue к конкретному циклу,
а не только к ближайшему. Это особенно полезно при работе
с вложенными циклами, когда нужно прервать или продолжить
внешний цикл из внутреннего.
Синтаксис
'label: loop
{
// ...
break 'label;
// ...
continue 'label;
}
Пример
Давайте прервём внешний цикл из внутреннего с помощью
метки 'outer и оператора break:
fn main()
{
'outer: for i in 1..4
{
for j in 1..4
{
if i * j == 4
{
println!("break at i={}, j={}", i, j);
break 'outer;
}
println!("i={}, j={}", i, j);
}
}
}
Результат выполнения кода:
i=1, j=1
i=1, j=2
i=1, j=3
i=2, j=1
break at i=2, j=2
Пример
Давайте с помощью метки 'outer и оператора
continue пропустим итерацию внешнего цикла
из внутреннего:
fn main()
{
'outer: for i in 1..4
{
for j in 1..4
{
if j == 2
{
continue 'outer;
}
println!("i={}, j={}", i, j);
}
}
}
Результат выполнения кода:
i=1, j=1
i=2, j=1
i=3, j=1
Пример
Давайте используем метку с циклом loop и
вернём значение из него через break с меткой:
fn main()
{
let mut count = 0;
let res = 'counting: loop
{
count += 1;
if count == 5
{
break 'counting count * 10;
}
};
println!("{}", res);
}
Результат выполнения кода:
50