Метод filter
Метод filter проверяет значение, содержащееся
в варианте Some, с помощью переданной функции-предиката.
Если предикат возвращает true, метод возвращает
исходный Some со значением. Если предикат возвращает
false, метод возвращает None. Если исходный
Option равен None, метод также возвращает None.
Параметром метод принимает замыкание, которое получает ссылку
на значение и возвращает булево значение.
Метод не изменяет исходный Option, а возвращает новый. Это позволяет удобно объединять проверку условия и обработку отсутствующего значения в одной цепочке вызовов.
Синтаксис
Option::filter(self, predicate)
Здесь self - это Option, для которого вызывается метод,
а predicate - замыкание, принимающее ссылку на значение
и возвращающее bool.
Пример
Давайте проверим, что значение внутри Some больше нуля:
fn main()
{
let opt = Some(5);
let res = opt.filter(|&x| x > 0);
println!("{:?}", res);
}
Результат выполнения кода:
Some(5)
Пример
Давайте проверим, что значение внутри Some больше нуля,
когда значение отрицательное:
fn main()
{
let opt = Some(-3);
let res = opt.filter(|&x| x > 0);
println!("{:?}", res);
}
Результат выполнения кода:
None
Пример
Давайте применим filter к значению None:
fn main()
{
let opt: Option<i32> = None;
let res = opt.filter(|&x| x > 0);
println!("{:?}", res);
}
Результат выполнения кода:
None
Пример
Давайте используем filter вместе с map
для проверки строки на длину:
fn main()
{
let opt = Some("abcde");
let res = opt.filter(|s| s.len() == 5);
println!("{:?}", res);
}
Результат выполнения кода:
Some("abcde")