4 releases
0.1.3 | Mar 26, 2023 |
---|---|
0.1.2 | Mar 21, 2023 |
0.1.1 | Mar 16, 2023 |
0.1.0 | Mar 16, 2023 |
#1295 in Rust patterns
7KB
76 lines
Using macro to implement the comprehensions of imitating python language in rust
- You can initialize common collection types with relatively little code
Vec [v]
,HashMap {k=>v}
andHashSet {k}
have been implemented- VecSyntax:
(<types>)?(\(capacity\))?([result; for\(...\)((for|if)\(...\))*])
crate: https://crates.io/crates/set_derive
Examples
use set_derive::*;
# use std::{iter::zip,collections::{HashMap,HashSet}};
assert_eq!(set_derive!((8)[1; for(_ in 0..1)]).capacity(), 8);
let a = set_derive!(<i64>[i; for(i in 0..5) if(i & 1 == 0)]);
assert_eq!(a, vec![0, 2, 4]);
let a = set_derive!(<i16>(30)[j; for(i in 0..5) if(i & 1 == 0)
for(j in 0..=i)]);
assert_eq!(a.capacity(), 30);
assert_eq!(a, vec![0,0,1,2,0,1,2,3,4]);
let a = set_derive!({j; for(i in 0..5) if(i & 1 == 0)
for(j in 0..=i)});
assert_eq!(a, HashSet::from_iter(0..5));
let a = set_derive!({j => j + 1; for(i in 0..5)
if(i & 1 == 0) for(j in 0..=i)});
assert_eq!(a, HashMap::from_iter(zip(0..5, 1..6)));