我正在处理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
的数组,否则将不返回任何值,而左侧将其存储为一个选项(以便以后可以在Some
或None
上进行匹配)
错误是:
no method named 'collect' found for type std::option::Option<&str> in the current scope
这对我来说没有意义,因为我(认为)我正在尝试收集迭代器的输出,而不是收集一个选项。
答案 0 :(得分:2)
该错误消息不是在骗你。 Option
不没有名为collect
的方法。
我(认为)我正在尝试收集迭代器的输出
Iterator::nth
返回一个Option
。 Option
未实现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,
};