You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust如何实现返回过滤谓词的函数用于迭代器filter筛选

问题原因

你的代码有两个核心错误导致无法运行:

  • 闭包返回值不匹配:filter 方法要求传入的谓词必须返回 bool 类型,你声明的返回类型 impl FnMut(&str) 没有指定返回值,默认是单元类型 (),和 filter 的要求不兼容。
  • 性能冗余:每次将字符串转为 Vec<char> 再取索引会产生多余的内存分配,完全可以直接用字符迭代器的nth()方法取值。
    另外边界场景下如果n超过字符串的字符长度,unwrap()会直接触发panic,建议根据业务需求调整异常处理逻辑。
修正后的实现
fn create_predicate(character: char, n: usize) -> impl Fn(&str) -> bool {
    move |x: &str| {
        // 长度不足时默认返回false过滤,需要panic的话可以换成 x.chars().nth(n).unwrap() == character
        x.chars().nth(n).map_or(false, |c| c == character)
    }
}
使用示例
let n = 0; // 可动态修改
let co2: Vec<String> = co2
    .into_iter()
    .filter(create_predicate('q', n))
    .collect();

内容的提问来源于stack exchange,提问作者Sebastian Berglönn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:36:05