Sto imparando Rust in questo momento e sembra che non sia possibile specificare una chiusura come parametro di funzione. Ecco quello che ho:Impossibile passare la chiusura come parametro
fn foo(a: i32, f: |i32| -> i32) -> i32 {
f(a)
}
fn main() {
let bar = foo(5, |x| { x + 1 });
println!("{}", bar);
}
ottengo il seguente errore:
foo.rs:1:19: 1:20 error: expected type, found `|`
foo.rs:1 fn foo(a: i32, f: |i32| -> i32) -> i32 {
Va bene, quindi non mi piaceva la sintassi di chiusura. Questo è un po 'fastidioso, perché ora devo scrivere questo:
fn foo(a: i32, f: Box<Fn(i32) -> i32>) -> i32 {
f(a)
}
fn main() {
let bar = foo(5, Box::new(|x| { x + 1 }));
println!("{}", bar);
}
Allora, che sta succedendo? Ho letto in alcuni numeri diversi places che il primo esempio è valido, quindi questa sintassi del "parametro tipo di chiusura" è stata rimossa o sto facendo qualcosa di sbagliato?
[RFC 114] (https://github.com/rust-lang/rfcs/blob/master/text/0114-closures.md) è più rilevante per questo cambiamento rispetto a RFC 231, ma i dettagli di RFC 114 non sono attuali (ad esempio, 'Fn' è ora' FnMut' e 'FnShare' è ora' Fn'). –
* contrassegnali esplicitamente come deprecati * - oppure chiedi all'altro risponditore di aggiornare la risposta^_ ^. L'ho fatto e è stato aggiornato in pochi minuti. Ora, questa domanda dovrebbe essere contrassegnata come duplicata? – Shepmaster
Non avevo in mente QUI, ma piuttosto post di blog, in cui il contenuto non è aggiornabile dalla community. Potrebbe anche essere indesiderabile; per esempio, i post del blog di Niko Matsakis sono più relativi al processo di pensiero: lo terresti come un riferimento storico piuttosto che come un documento aggiornato. – mdup