Rust — использование Optionenum для обработки ошибок

Опубликовано: 23 Февраля, 2023

В Rust при написании кода основное внимание уделяется производительности, безопасности и параллелизму. Он специально использует перечисления, такие как Option<T> и Result<T>, для обработки ошибок. Тип параметра в Rust обычно обозначает значения параметров, которые имеют два атрибута: Some и None. Тип параметра создает поле i32 для использования внутренних значений.

Параметры <T> используют совпадения с образцом для запроса о том, присутствует ли значение или нет, и в случае его отсутствия ссылается на значение, допускающее значение NULL (None). Всякий раз, когда есть совпадение с образцом, компилятор ржавчины присваивает ячейке значение, и если таковых нет, то ячейка пуста.

Пример 1:

Rust




#![allow(unused)]
fn main() {
let matching_digit = Some(100);
fn processing_digit(i: i32) {
println!("Inside Processing digit function!");
}
fn processing_other_digit(i: i32) {
println!("Inside Processing Other digit function!");
      
}
let msg = match matching_digit {
    Some(x) if x < 20 => processing_digit(x),
    Some(x)  => processing_digit(x),
    None => panic!(),
};
}

Выход:

Объяснение:

В этом примере мы использовали переменную с именем match_digit, которая содержит значение, переданное функцией Some(). Цифра обработки функции, а также цифра функции other_processing принимают 32-битные целые числа. Теперь мы передаем значение 100 и назначаем условие одному из параметров Some, что если значение меньше 20, оно совпадет и будет вызвана функция processing_digit, а если ничего не передано, Rust будет использовать None, что вызовет панику.

Пример 2:

Rust




fn find(search: &str, variable: char) -> Option<usize> {search.find(variable) }
fn main() {
    let var_name = "GeeksforGeeks";
    match find(var_name, "G") {
        None => println!("Letter not found"),
        Some(_i) => println!("Letter found"),
    }
}

Выход:

Объяснение:

В этом примере мы сначала находим букву «G» и с помощью Some() проверяем, присутствует ли значение или нет. Если он присутствует, то var_name соответствует функции поиска, и мы печатаем найденную букву в выводе.

Точно так же, для другого примера, если мы будем искать букву «Z», мы ее не найдем.

Пример 3:

Rust




fn find(search: &str, variable: char) -> Option<usize> { search.find(variable) }
fn main() {
    let var_name = "GeeksforGeeks";
    match find(var_name, "Z") {
        None => println!("Letter not found"),
        Some(_i) => println!("Letter found"),
    }
}

Выход: