Pull to refresh

Comments 8

command @ _ =>
вполне можно заменить на command =>
    let max = rs.iter().fold(
        0,
        |acc, ref item|
        if item.name.len() > acc { item.name.len() } else { acc });

вполне заменяется на
    let max = rs.iter().map(|item| item.name.len()).max();

И ref у вас лишний — item и так будет, скорее всего, ссылкой потому что используется iter(), но даже если и нет (если iter() на ResultSet'е возвращает значения, а не ссылки), то ref бессмысленнен — item будет передан в замыкание по значению в любом случае.

И ещё, вместо разбора аргументов программы вручную я бы посоветовал воспользоваться какой-нибудь библиотекой, вроде docopt. Бонус docopt — читабельный хелп к программе.
>> docopt

https://github.com/kbknapp/clap-rs же :)

Он даже был пакетом недели недавно — http://this-week-in-rust.org/blog/2015/09/14/this-week-in-rust-96.
Ну лично мне docopt импонирует больше, хотя, насколько я вижу, clap-rs всё же будет пофункциональнее.
Да, где-то видел что это «лучшая библиотека разбора аргументов вообще, с которой приходилось работать» (по мнению одного из пользователей; мой вольный перевод).
Мне docopt больше нравится тем, что с его помощью можно десериализовать аргументы в готовую структуру с нужными типами. Как это сделать с помощью clap без головной боли я так и не понял. Ну лениво мне самому аргрументы в инты парсить, гораздо проще сделать так:

struct Args {
  arg_count: usize,
}

let args: Args = Docopt::new(USAGE)
                            .and_then(|d| d.decode())
                            .unwrap_or_else(|e| e.exit());

Классно, спасибо.

На самом деле, как вы можете догадаться, мелочи вроде ref присутствуют в коде потому, что когда-то я их добавил в попытках заставить программу компилироваться, а затем не удалил. Код в целом весьма старый на самом деле — июнь.

docopt не стал пользоваться потому что показалось, что это достаточно просто сделать самому (в отличие от разбора INI). Заодно показал, как пользоваться match.
docopt не стал пользоваться потому что показалось, что это достаточно просто сделать самому (в отличие от разбора INI). Заодно показал, как пользоваться match.

Ну если для обучения, то смысл это имеет, хотя показать различные библиотеки и посоветовать не переизобретать велосипеды тоже хорошо :)
Sign up to leave a comment.

Articles