以下 Rust 代碼嘗試將零引數的閉包存盤在陣列中并呼叫該函式。
fn main() {
println!("The answer is: {}", solution_fns[0]());
}
const solution_fns: [fn() -> isize] =
[|| (1..=999).filter(|e| divides(3, e) || divides(5, e)).sum()];
fn divides(d: usize, n: usize) -> bool {
n % d == 0
}
鏈接到 Rust 游樂場。不幸的是它不能編譯:
錯誤[E0277]:
[fn() -> isize]編譯時無法知道型別值的大小--> src/main.rs:5:21 | 5 | const solution_fns: [fn() -> isize] = |
^^^^^^^^^^^^^^^ 在編譯時沒有已知的大小 | = help: 特性Sized沒有實作[fn() -> isize]
我知道你不能構造一個在編譯時大小未知的陣列(或 Vec)。但是我理解型別[fn() -> isize]是函式指標陣列,我不明白為什么函式指標不應該有一個已知的大小。將封口粘在盒子里似乎沒有幫助:
const solution_fns: [Box<fn() -> isize>] = [Box::new(|| {
(1..=999).filter(|e| divides(3, e) || divides(5, e)).sum()
})];
那么如何存盤一組閉包呢?
uj5u.com熱心網友回復:
問題不在于 fn 指標,而在于您的陣列沒有大小。只需將預期大小添加到陣列宣告中即可解決:
const solution_fns: [fn() -> usize; 1] =
[|| (1..=999usize).filter(|&e| divides(3, e) || divides(5, e)).sum()];
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/355599.html
上一篇:使用值創建N長度的陣列
