首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Rust中的闭包数组

Rust中的闭包数组
EN

Stack Overflow用户
提问于 2021-11-10 00:54:58
回答 2查看 339关注 0票数 2

下面的Rust代码试图在数组中存储零参数的闭包并调用该函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
}

isize] = [|| (1..=999).filter(|e| divides(3, e) || divides(5, e)).sum()]; fn divides(d: usize, n: usize) -> bool { n % d == 0 } )">与锈蚀操场的连结。不幸的是,它没有编译:

errorE0277:在编译时无法知道[fn() -> isize]类型值的大小-> src/main.rs:5:21 ^不具有编译时已知的大小:属性Sized不是为[fn() -> isize]实现的

据我所知,您不能构造一个在编译时不知道大小的事物数组(或Vec)。但是,我理解[fn() -> isize]类型是函数指针数组,我不明白为什么函数指针不应该有一个已知的大小。把封口贴在盒子里似乎没什么用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const solution_fns: [Box<fn() -> isize>] = [Box::new(|| {
    (1..=999).filter(|e| divides(3, e) || divides(5, e)).sum()
})];

那么,我如何存储一系列闭包呢?

EN

回答 2

Stack Overflow用户

发布于 2021-11-10 03:00:41

问题不在fn指针中,而是数组没有大小。只需将预期的大小添加到数组声明中即可解决:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const solution_fns: [fn() -> usize; 1] =
    [|| (1..=999usize).filter(|&e| divides(3, e) || divides(5, e)).sum()];

游乐场

票数 4
EN

Stack Overflow用户

发布于 2022-01-20 01:47:28

如果使用片,则不必指定大小:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fn main() {
    println!("The answer is: {}", SOLVERS[0]());
}

const SOLVERS : &[fn() -> usize] =
    &[|| (1..=999).filter(|&e| divides(3, e) || divides(5, e)).sum()];

fn divides(d: usize, n: usize) -> bool {
    n % d == 0
}

链接到操场

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69910269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文