首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在vec上进行映射,并在Rust中使用带有模式匹配的闭包

如何在vec上进行映射,并在Rust中使用带有模式匹配的闭包
EN

Stack Overflow用户
提问于 2016-06-15 23:29:17
回答 4查看 2.7K关注 0票数 3

我想使用map来迭代一个数组,对每个项目做一些事情,并去掉for循环。一个我不理解的错误阻止了我的尝试。我想要实现的是迭代i32的向量,并对它们进行匹配,以将字符串与字符串文字连接起来,然后在最后返回它。

功能:

代码语言:javascript
复制
pub fn convert_to_rainspeak(prime_factors: Vec<i32>) -> String {
    let mut speak = String::new();
    prime_factors.iter().map(|&factor| {
        match factor {
            3 => { speak.push_str("Pling"); },
            5 => { speak.push_str("Plang"); },
            7 => { speak.push_str("Plong"); },
            _ => {}
        }
    }).collect();
    speak
}

fn main() {}

输出:

代码语言:javascript
复制
error[E0282]: type annotations needed
  --> src/main.rs:10:8
   |
10 |     }).collect();
   |        ^^^^^^^ cannot infer type for `B`
EN

Stack Overflow用户

发布于 2016-06-15 23:38:06

几分钟后,我自己解决了这个问题(欢迎升级):

代码语言:javascript
复制
pub fn convert_to_rainspeak(prime_factors:Vec<i32>) -> String{
    let mut speak:String = prime_factors.iter().map(|&factor| {
        match factor {
            3 => {"Pling"},
            5 => {"Plang"},
            7 => {"Plong"},
            _ => {""}
        }
    }).collect();
    speak
}

问题是我不知道.collect()正在等待map的结果。然后,我将prime_factors.iter()...赋给了一个字符串,并重新安排了var绑定,现在一切都正常了。

编辑:对发言人向量的冗余赋值进行了重构

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

https://stackoverflow.com/questions/37839702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档