Почему я получаю сообщение об ошибке «метод с именем collect не найден для типа Option»? - PullRequest
0 голосов
/ 21 января 2019

Я занимаюсь Упражнением 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();
}

Мое понимание чегоявляется то, что правая часть выдаст массив из двух &str s, если строка имеет ненулевую длину, или не вернет ничего, а левая часть сохранит ее как опцию (чтобы позже я мог сопоставитьна Some или None)

Ошибка:

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

Это не имеет смысла для меня, так как я (думаю) я пытаюсь собрать выводитератора, я не собираю опцию.

1 Ответ

0 голосов
/ 21 января 2019

Сообщение об ошибке не лжет вам. 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,
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...