Что это за конкретное предложение `where`, это закрытие, какая-то функция или перечисление?

Я вижу две разные вещи:

fn for_each<F>(self, f: F) where F: FnMut(Self::Item)

И:

fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering where I: IntoIterator, F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering

У одного есть ->, а у другого нет. Они оба называются Fn, что заставляет меня думать, что это может быть закрытие. Но я не вижу никаких Примеры.

Что означают предложения where именно в этой ситуации?

-> SomeType указывает, что функция возвращает SomeType, а предложение where ... — это отдельный бит синтаксиса, определяющий границы дженериков.

JMAA 19.03.2022 22:36

Если вы имеете в виду ->после границы where, это специальный синтаксис для признака Fn, F: Fn(A) -> B означает, что F — это функция (возможно, замыкание), которая принимает A и возвращает B

Filipe Rodrigues 20.03.2022 13:44
Почему Python в конце концов умрет
Почему Python в конце концов умрет
Последние 20 лет были действительно хорошими для Python. Он прошел путь от "просто языка сценариев" до основного языка, используемого для написания...
0
2
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Rust аннотирует тип возвращаемого значения знаком ->.

fn foo() -> i32 { ... }

Когда функция возвращает (), вы можете опустить его для удобства. fn foo() -> () {} то же, что fn foo() {}.

То же самое происходит с указателями функций и замыканиями: fn() -> () (указатель на функцию, возвращающую ()) можно записать как просто fn(), и таким же образом Fn() -> () (должно быть частью общего ограничения или dyn, функции/замыкания, реализующей Fn черта ) можно записать как просто Fn().

Так,

fn for_each<F>(self, f: F) where F: FnMut(Self::Item)

Принимает функцию (или замыкание), которая принимает Self::Item и ничего не возвращает. И

fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering where I: IntoIterator, F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering

Принимает (помимо другого итератора other) функцию, которая принимает Self::Item и I::Item и возвращает Ordering (std::cmp::Ordering).

Другие вопросы по теме