我現在正在學習Rust,看來我無法將閉包指定爲函數參數。下面是我有:無法將閉包作爲參數
fn foo(a: i32, f: |i32| -> i32) -> i32 {
f(a)
}
fn main() {
let bar = foo(5, |x| { x + 1 });
println!("{}", bar);
}
我得到以下錯誤:
foo.rs:1:19: 1:20 error: expected type, found `|`
foo.rs:1 fn foo(a: i32, f: |i32| -> i32) -> i32 {
好了,所以它不喜歡封閉的語法。這是有點煩人,因爲現在我必須寫這個:
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);
}
那麼發生了什麼?我讀過幾個不同的places,第一個例子是有效的,所以這個「閉包類型參數」的語法被刪除,或者我只是做錯了什麼?
[RFC 114](https://github.com/rust-lang/rfcs/blob/master/text/0114-closures.md)與RFC 231相關的更多,但RFC 114的細節不是最新的(例如,「Fn」現在是「FnMut」,而「FnShare」現在是「Fn」)。 –
*明確表示將其標記爲已棄用* - 或者只是要求其他答覆者更新答案^ _ ^。我這樣做了,幾分鐘後就更新了。現在,這個問題應該被標記爲重複? – Shepmaster
我沒有記住SO,而是博客文章,其中的內容不是可更新的社區。它甚至可能是不受歡迎的;例如Niko Matsakis的博客文章更多的是關於思考過程 - 你會保留它作爲歷史參考,而不是最新的文檔。 – mdup