【问题标题】:Why do I get the error "no method named collect found for type Option"?为什么我会收到错误“没有为类型 Option 找到名为 collect 的方法”?
【发布时间】:2019-01-21 20:15:13
【问题描述】:

我正在处理Exercism Rust 问题,其中字符串具有任意长度,但可能为空,并且需要根据其最后两个字素进行分类。

我的理解是,Option 用于解释可能为空或不为空的东西,而这在编译时是未知的,所以我试过这个:

extern crate unicode_segmentation;

use unicode_segmentation::UnicodeSegmentation;

pub fn reply(message: &str) -> &str {
    let message_opt: Option<[&str; 2]> = message.graphemes(true).rev().take(2).nth(0).collect();
}

我对此的理解是,如果字符串长度不为零,则右侧将给出一个包含两个&amp;strs 的数组,或者将不返回任何值,而左侧将其存储为选项(这样我以后可以匹配 SomeNone

错误是:

no method named 'collect' found for type std::option::Option<&str> in the current scope

这对我来说没有意义,因为我(认为)我正在尝试收集迭代器的输出,我不是收集一个选项。

【问题讨论】:

    标签: rust


    【解决方案1】:

    错误消息并没有骗你。 Option没有有一个名为collect的方法。

    我(认为)我正在尝试收集迭代器的输出

    Iterator::nth 返回一个OptionOption 没有实现Iterator;你不能打电话给collect

    Option&lt;[&amp;str; 2]&gt;

    你也不能这样做:


    我会这样写

    let mut graphemes = message.graphemes(true).fuse();
    
    let message_opt = match (graphemes.next_back(), graphemes.next_back()) {
        (Some(a), Some(b)) => Some([a, b]),
        _ => None,
    };
    

    【讨论】:

    • 哈哈,我不认为这是在骗我:) 哦,我以为选项指的是左侧,这就是我感到困惑的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多