В этом примере деталь с чертой
pub trait Iterator {
// The type being iterated over.
type Item;
// `any` takes `&mut self` meaning the caller may be borrowed
// and modified, but not consumed.
fn any<F>(&mut self, f: F) -> bool
where
// `FnMut` meaning any captured variable may at most be
// modified, not consumed. `Self::Item` states it takes
// arguments to the closure by value.
F: FnMut(Self::Item) -> bool,
{}
}
просто показывает подпись метода. В частности, он сообщает вам, какие аргументы он принимает, какие универсальные типы он использует и какой тип он возвращает. Он не предназначен для выполнения, и действительно является источником ошибки компиляции, которую вы видите.
Конкретная ошибка заключается в том, что any
должен вернуть bool
, но сейчас он возвращает ()
(тип объекта, который имеет уникальный элемент). Причина этого кроется в маленьком {}
ближе к концу. На самом деле это пустое тело функции, которое неявно возвращает ()
, если у него нет оператора возврата или чего-либо еще, что могло бы вернуть.
Если вы просто хотите сделать пример компиляции, вы можете просто удалитьэтот кусок (весь блок pub trait ...
), поскольку он не является частью примера. Даже если вы исправите это и сохраните его, any
, используемый в остальной части примера, в любом случае будет не таким, а методом any
, определенным для реальной черты Iterator
в стандартной библиотеке.