Kiedyś miałem coś takiego:Jak przechowywać zamknięcie w Rust?
struct Foo {
pub foo: |uint| -> uint,
}
Teraz składnia zamknięcia jest nieaktualne. Mogę zrobić coś takiego:
struct Foo<F: FnMut(uint) -> uint> {
pub foo: F,
}
Ale co to za typ Foo
obiektu tworzę?
let foo: Foo<???> = Foo { foo: |x| x + 1 };
mogę również użyć odwołania:
struct Foo<'a> {
pub foo: &'a mut FnMut(uint) -> uint
}
Ale myślę, że to wolniej, ponieważ a) deref wskaźnik, oraz b) Teraz nie ma żadnego specjalizacja dla typu FnMut
że faktycznie kończy się używany.
"Bezpośrednim odpowiednikiem będzie Box uint>. Tak naprawdę jest to, co właściwie oznaczała stara składnia." Nie, bezpośrednim odpowiednikiem jest 'i mut FnMut (uint) -> uint'.Tylko 'proc's miał przydzielenie (stary' proc' jest równoważny 'Box ...>'). –
huon
(Zwróć także uwagę, że '& FnMut' i' Box
huon
@dbaupp: Dzięki. Obwiniam grypę i źle dobrane imię. : P –