Загружаем изображение…
Продолжаем наши изыскания в области языка Rust и функций в частности. Сегодня об анонимных функциях (замыканиях), а также об обобщённых параметрах.

Анонимные функции или замыкания не имеют имени. Их можно определить внутри другой функции. Признаком их являются две вертикальные черты, между которыми указываются параметры. Анонимную функцию можно присвоить переменной и потом использовать в выражениях.

fn main() {
// простая анонимная функция, возведение в степень
 let pwr = |n:i64|{
    n * n
 };
 println!("{}", pwr(33));
// анонимная функция без скобок
// без указания типов параметров
 let sum = |a, b|a+b;
 println!("{}",sum(222, 900));
}

В программе выше определены две анонимные функции. Если выражение в функции однострочное, то можно обойтись без фигурных скобок. Результат выполнения программы

1089
1122

Анонимные функции могут захватывать переменные и их можно передавать в другие функции в качестве параметров.

// функция с обобщённым параметром (F)
fn dv<F>(divi:F, b:i64).
where.
  F:Fn(i64)->&'static str,.
{
  println!("{} {}", divi(b), divi(b+1));
}
fn main() {
// анонимная функция с замыканием (захватом переменной a)
  let a:i64 = 7;
  let div = |n:i64| {
     if n % a == 0 {
       "Делится"
     } else {
       "Не делится"
     }
  };
  println!("{} {}", div(49), div(50));
  dv(div, 56);
}


Что мы видим?
1. Анонимная функция захватывает переменную a.
2. Анонимная функция передаётся в качестве параметра.

Самое интересное, как определяется функция, у которой есть параметр -функция. Важно <F> - мы указываем обобщённый параметр. После слова where указывается какому условию он должен удовлетворять. Таким образом в функцию можно передавать и другие параметры-функции, если они удовлетворяют указанному условию (соответствуют сигнатуре).

Не забываем, что по адресу
https://dzen.ru/a/aq_S5YWcNkgWfHcO

перечислены статьи по Rust, распределённые по темам, которые опубликовал в данном канале.
Просмотры: 33
Открыть в MAX Сообщить о неточности

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти