Понимание Python - просто сахар для цикла for и аккумулятора.Rust имеет макросов - вы можете сделать любой сахар, какой захотите.
Возьмите этот простой пример Python,
print({i+i: i*i for i in range(1, 5)})
Вы можете легко переписать это как цикли аккумулятор:
map = {}
for i in range(1, 5):
map[i+i] = i*i
print(map)
Вы можете сделать это в основном так же, как в Rust.
use std::collections::HashMap;
fn main() {
let mut hm = HashMap::new();
for i in 1..5 {
hm.insert(i + i, i * i);
}
println!("{:?}", hm);
}
Вы можете использовать макрос, чтобы переписать эту форму за вас.
use std::collections::HashMap;
macro_rules! hashcomp {
($name:ident = $k:expr => $v:expr; for $i:ident in $itr:expr) => {
let mut $name = HashMap::new();
for $i in $itr {
$name.insert($k, $v);
}
};
}
Когда вы используете его, полученный код получается гораздо более компактным.И этот выбор маркеров-разделителей делает его похожим на Python.
fn main() {
hashcomp!(hm = i+i => i*i; for i in 1..5);
println!("{:?}", hm);
}
Это просто базовый пример, который может обрабатывать один цикл.Понимания Python также могут иметь фильтры и дополнительные циклы, но более продвинутый макрос, вероятно, тоже может это сделать.