Search
Write a publication
Pull to refresh
Криптонит
Разрабатываем. Исследуем. Просвещаем

На картинке — код на Rust, и в нём затаилась ошибка. Я специально попросила её сделать моих коллег, разработчиков ИТ-компании «Криптонит».

Зачем? Чтобы потом попросить её найти и написать о ней в комментариях (ох, уж эти сммщики).

Итак, где тут ошибка?

СЕЙЧАС БУДЕТ СПОЙЛЕР!

Так в чём же ошибка?

В третьей строке возникает ошибка попытки доступа к элементу за пределами массива.
for i in 1..=numbers.len() выполнит итерацию по элементам, начиная со второго, а не с первого.

Ошибка заключается в попытке доступа к элементу с индексом [5] на последней итерации цикла. Такого элемента в массиве нет, в результате получаем аварийное завершение программы.

Также следует обратить внимание, что первый элемент массива с индексом [0] игнорируется. Это не является ошибкой с точки зрения выполнения программы, однако скорее всего является логической ошибкой в коде

Итак, в языке rust индексация элементов начинается с 0 и заканчивается len() - 1.
В массиве из 5 элементов допустимо обращение к [0], [1], [2], [3] и [4] элементам.

Рекомендуемый способ перебора элементов коллекции с автоматической индексацией на rust — использование цепочки вызовов iter().enumerate().

Вот как это выглядит

fn main() { 
    let numbers = vec![10, 20, 30, 40, 50];
    for (index, number) in numbers.iter().enumerate() { 
        println!("Элемент {index}: {number}");
    } 
}

Этот вариант позволяет также упростить выражение println, поместив печатаемые значения сразу в скобки на свои места. Это исключает возможность ошибиться в порядке печати значений и повысив наглядность кода.

Tags:
Total votes 5: ↑3 and ↓2+1
Comments1

Articles

Information

Website
kryptonite.ru
Registered
Founded
Employees
501–1,000 employees
Location
Россия