Prenons les exemples suivants:
main.rs
use futures::executor::block_on;
use futures::future::{FutureExt, TryFutureExt};
async fn fut1() -> Result<String, u32> {
Ok("ok".to_string())
}
fn main() {
println!("Hello, world!");
match block_on(fut1().and_then(|x| async move { Ok(format!("{} is \"ok\"", x)) })) {
Ok(s) => println!("{}", s),
Err(u) => println!("{}", u)
};
}
Cargo.toml
[dependencies]
futures = "^0.3"
Je pose des questions sur l'expression |x| async move {}
au lieu de async move |x| {}
. Ce dernier est plus évident, mais il rencontre l'erreur de compilation:
error[E0658]: async closures are unstable
Ensuite, je me demande quelle est la différence entre async move || {}
et || async move {}
. Les deux semblent être des fermetures pour l'utilisation du move
mot - clé.
$ rustc --version
rustc 1.39.0 (4560ea788 2019-11-04)
async move || ...
va déplacer les variables du bloc englobant vers la fermeture, tandis que|| async move {...}
va déplacer les variables de la fermeture vers le bloc asynchrone. si vous souhaitez les déplacer du bloc englobant dans le bloc asynchrone, je pense que vous devez utilisermove || async move {...}
pour l'instant.