Pull to refresh

Comments 2

Большое спасибо за статью! Очень здорово, что по Rust они появляются и на русском.

Пара замечаний. Во-первых, идиоматично переиспользовать имена переменных в паттернах наподобие того, что демонстрирует ваш код:

let sdb = Arc::new(Mutex::new(db));
{
    let sdb = sdb.clone();
    thread::spawn(move || do_something(sdb));
}


Т.е. не нужно добавлять суффиксов-префиксов, можно просто переопределить (в смысле rebind, а не reassign) существующую переменную.

Во-вторых, where — это не «задание краткого имени для длинного типа», это определение ограничений на дженериковую ти́повую переменную:

    fn do_something<T: 'a + Trait1 + Trait2 + Trait3>() { ... }
    // equivalent to
    fn do_something<T>() where T: 'a + Trait1 + Trait2 + Trait3 { ... }


Обычно where используется, если ограничений много или если они большие (например, большая сигнатура замыкания), потому что в таком случае их проще будет распределить по нескольким строчкам. Если ограничения простые (один-два коротких трейта), то чаще используется синтаксис с ограничениями в списке параметров.
Пара замечаний. Во-первых, идиоматично переиспользовать имена переменных в паттернах наподобие того, что демонстрирует ваш код:

Я знаю про эту практику, но мне она не нравится. Маскировать переменные можно и в Си, однако обычно я этого избегаю, т.к. это вносит путаницу и обычно сигнализирует о чрезмерной вложенности или непродуманности имён.
Во-вторых, where — это не «задание краткого имени для длинного типа», это определение ограничений на дженериковую ти́повую переменную:

Разумеется. Спасибо. Подумал про одно, написал про другое.
Sign up to leave a comment.

Articles