为什么会出现错误“没有为Option类型找到名为collect的方法”?

时间:2019-01-21 20:15:14

标签: rust

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

我的理解是,Option用于解释在编译时未知的情况下可能为null或不为null的内容,因此我尝试了以下方法:

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();
}

我的理解是,如果字符串的长度不为零,则右侧将给出两个&str的数组,否则将不返回任何值,而左侧将其存储为一个选项(以便以后可以在SomeNone上进行匹配)

错误是:

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

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

1 个答案:

答案 0 :(得分:2)

该错误消息不是在骗你。 Option 没有名为collect的方法。

  

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

Iterator::nth返回一个OptionOption未实现Iterator;您不能在其上调用collect

  

Option<[&str; 2]>

您也不能这样做:


我会这样写

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,
};