首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入到HashMap<&str,u64>中时出现错误类型错误

插入到HashMap<&str,u64>中时出现错误类型错误
EN

Stack Overflow用户
提问于 2016-01-23 15:07:43
回答 1查看 1.6K关注 0票数 2

我正在创建一个简单的程序,每次读取stdin一行,直到它到达文件的末尾,然后在输入中打印每个字母的频率(即:字符,实际上是Unicode图形符号)。完整的消息来源是关于Github的。。我使用的是rustc版本1.6.0和cargo 0.7.0

在程序中,我定义了一个HashMap<&str, u64>来存储统计信息,使用字母作为键,字母出现的次数作为值。在循环遍历每个字母时,我做以下操作来存储统计数据:

代码语言:javascript
复制
for line in stdin.lock().lines() {
    let mut line = line.unwrap().as_str();

    // For each line, store it's character.
    for grapheme in UnicodeSegmentation::graphemes(line, true) {
        match counter.get(grapheme) {
            Some(v) => counter.insert(grapheme, v + 1),
            None => counter.insert(grapheme, 1)
        }
    }
}

( grapheme 是对字符串的引用。)。

我意识到这可能不是更新hashmap中的计数器的最好方法,但我相信它在技术上应该有效--毕竟我是一个完全的锈菌n00b。

当我cargo build,我得到:

代码语言:javascript
复制
 expected `()`,
    found `core::option::Option<u64>`
(expected (),
    found enum `core::option::Option`) [E0308]
src/main.rs:18             match counter.get(grapheme) {
src/main.rs:19                 Some(v) => counter.insert(grapheme, v + 1),
src/main.rs:20                 None => counter.insert(grapheme, 1)
src/main.rs:21             }

..。通过查看E0308的文档和准确的错误消息,我了解到编译器得到了一种类型,并期望得到另一种类型;但我不明白:

  • 无论我看到的是两个不匹配还是一个,即:
    • core::option::Option<u64>core::option::Option之间是否有错配?
    • ()core::option::Option<u64>以及()core::option::Option之间有两种不匹配吗?
    • 还有别的吗?

  • 我不明白如何告诉Rust的编译器如何用正确的类型解释事物(即:如何解决问题)。
EN

回答 1

Stack Overflow用户

发布于 2016-01-23 15:45:01

在上面的代码中,match表达式具有Option<u64>类型(因为所有分支都有Option<u64>类型)。for循环主体必须以语句结束,因此只需放置一个;即可使match成为一条语句。

代码语言:javascript
复制
match counter.get(grapheme) {
    Some(v) => counter.insert(grapheme, v + 1),
    None => counter.insert(grapheme, 1)
};

想了解更多细节请看这里

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

https://stackoverflow.com/questions/34965034

复制
相关文章

相似问题

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