При исправлении ящика я взял на себя ответственность скрыть внутренний тип итератора, но автор говорит, что публикация типа - это особенность, и что лучше всего публиковать явную структуру оболочки для каждого итератора, представленного в открытом доступе. API. Очевидно, стандартная библиотека Rust делает это для всех своих итераторов.
Зачем это? Более конкретно, если реализует тип, совместимый с std::env::Args
, каковы плюсы и минусы использования ...
// implement iterator compatible with std::env::Args
pub struct Args { // public
// pub(crate) ...
}
impl Iterator for Args {
// ...
}
pub fn args() -> Args {
// ...
// return Args
}
против
// implement iterator compatible with std::env::Args
pub(crate) struct Args { // hidden (outside of crate)
// pub(crate) ...
}
impl Iterator for Args {
// ...
}
pub fn args() -> impl Iterator<Item = String> {
// ...
// return Args
}