Ho usato per avere qualcosa di simile:Come si memorizza una chiusura in Rust?
struct Foo {
pub foo: |uint| -> uint,
}
Ora la sintassi di chiusura è obsoleto. Posso fare qualcosa di simile:
struct Foo<F: FnMut(uint) -> uint> {
pub foo: F,
}
Ma allora qual è il tipo di un oggetto Foo
creo?
let foo: Foo<???> = Foo { foo: |x| x + 1 };
potrei anche utilizzare un riferimento:
struct Foo<'a> {
pub foo: &'a mut FnMut(uint) -> uint
}
Ma penso che sia più lento perché a) il deref puntatore, e b) ora non c'è specializzazione per il tipo di FnMut
che in realtà finisce per essere Usato.
"L'equivalente diretto sarebbe Box uint> Questo è effettivamente ciò che intendeva realmente la sintassi precedente." No, l'equivalente diretto è '& mut FnMut (uint) -> uint'.Solo 'proc's aveva un'allocazione (il vecchio' proc' è equivalente a 'Box ...>'). –
huon
(Inoltre, si noti che '& FnMut' e' Box
huon
@dbaupp: Grazie. Do la colpa all'influenza e al nome scarsamente scelto. : P –