Size: a a a

RU Rust GameDev — русскоговорящее сообщество

2020 October 30

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
А снаружи
источник

A

Adevald in RU Rust GameDev — русскоговорящее сообщество
Не понимаю. Замыкание может передаться куда угодно, как оно может знать с чем работать? Оно же просто вызывается и в него передаются значения требуемые
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
{
   let quux = 9;
   let lambda = || {
       println!("quux: {}", quux);
   };
   lambda();
}
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Тут замыкание не принимает никаких параметров, но при этом может работать с quux, не являющейся частью замыкания.
источник

A

Adevald in RU Rust GameDev — русскоговорящее сообщество
Ну то есть лямбда схораняет все ссылки на переменные из того места где она определена?
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Конечно.
источник

A

Adevald in RU Rust GameDev — русскоговорящее сообщество
Таки понел
источник

L

Lain-dono in RU Rust GameDev — русскоговорящее сообщество
Adevald
я понимаю. Тогда что за внешние переменные
источник

A

Adevald in RU Rust GameDev — русскоговорящее сообщество
Да, пояснили, спасибо
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
А если ты добавишь слово move к определению лямбды, она не станет сохранять ссылки а сразу переместит в себя значения.
источник

A

Adevald in RU Rust GameDev — русскоговорящее сообщество
А как она о них узнает если они не будут определены
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
В смысле.
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Приведи пример
источник

A

Adevald in RU Rust GameDev — русскоговорящее сообщество
навроде того как если мы ждём что в переменную что то будет записано.
источник

A

Adevald in RU Rust GameDev — русскоговорящее сообщество
А
источник

A

Adevald in RU Rust GameDev — русскоговорящее сообщество
Падажи
источник

A

Adevald in RU Rust GameDev — русскоговорящее сообщество
то есть тогда вообще все указанные в лямбде переменные будут заимствованы лямбдой и улетят в далёкие края вместе с ней?
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
В расте не улетят.
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Боров-чекер не даст.
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Mikola Summer Duck
{
   let quux = 9;
   let lambda = || {
       println!("quux: {}", quux);
   };
   lambda();
}
Этот код эквивалентен
struct MyLambda<'a> {
   quux_ref: &'a i32;
}

impl<'a> Fn for MyLambda<'a> {
   fn call(&self) {
       println!("quux: {}", self.quux_ref);
   }
}

{
   let quux = 9;
   let lambda = MyLambda { quux_ref: &quux };
   lambda.call();
}
источник