До Rust 1.0 я мог написать структуру, используя этот устаревший синтаксис замыкания:
struct Foo {
pub foo: |usize| -> usize,
}
Теперь я могу сделать что-то вроде:
struct Foo<F: FnMut(usize) -> usize> {
pub foo: F,
}
Но тогда какой тип объекта Foo
я создаю?
let foo: Foo<???> = Foo { foo: |x| x + 1 };
Я также мог бы использовать ссылку:
struct Foo<'a> {
pub foo: &'a mut FnMut(usize) -> usize,
}
Я думаю, что это медленнее, потому что
- разыменование указателя
- нет специализации для типа
FnMut
, который фактически используется