Piszę bibliotekę NGram w Rust. Chcę utworzyć "ogólny" ngram, w którym rozmiar nie musi być określany do czasu kompilacji (w przeciwieństwie do kiedy go koduję). Mały kod może pomóc to wyjaśnić.Tworzenie ogólnego typu sparametryzowanego przez numer
Tutaj jest po prostu to, co chcę, aby być w stanie to zrobić:
pub type Ngram<N> = Vec<[String; N]>;
i następnie go używać, po prostu zrobić coś takiego:
let vec = Ngram::<5>::new();
I byś stworzył pięć -gram (a dokładniej: Vec<[String; 5]>
). Czy coś takiego jest możliwe. Naprawdę nie chcę robić czegoś takiego:
pub type Ngram<N> = Vec<N>;
...
let vec = Ngram::<[String; 5]>::new();
To w dużej mierze zniszczyłoby cel stworzenia tego typu.
Możliwe jest jednak uzyskanie równoważnika przez napisanie makra, tak jak w przypadku standardowego vec! – trentcl
@trentcl Tak, myślę, że to właśnie będę musiał zrobić. Znalazłem także https://github.com/rust-lang/rfcs/issues/1038, który wydaje się być dokładnie tym, o czym mówię. Mam nadzieję, że pewnego dnia zostanie on wdrożony. – wmaxlees
@dobafresh: Jest bardzo pożądany i ściśle związany z oceną funkcji podczas kompilacji (ponieważ posiadanie tylko nieprzetworzonych liczb bez możliwości ich modyfikacji nie jest tak użyteczne). –