2015-01-06 19 views
7

Genel yineleyiciler için yineleyicinin çıktısının türünde sınırların nasıl belirtileceğinden emin değilim.Yineleyici türüne nasıl bağlanır? Öğe?

fn somefunc<A: Int, I: Iterator<A>>(xs: I) { 
    xs.next().unwrap().pow(2); 
} 

Fakat şimdi, yineleyici Item türüne sınırları koymak nasıl emin değilim: Rust 1.0 önceleri, böyle yapabilmek için kullanılır.

fn somefunc<I: Iterator>(xs: I) { 
    xs.next().unwrap().pow(2); 
} 
error: no method named `pow` found for type `<I as std::iter::Iterator>::Item` in the current scope 
--> src/main.rs:2:28 
    | 
2 |   xs.next().unwrap().pow(2); 
    |       ^^^ 

Bunu nasıl işe alabilirim?

cevap

11

İkinci bir genel tür parametresi tanıtmak ve bu konuda sınır yerleştirebilirsiniz:

fn somefunc<A: Int, I: Iterator<Item = A>>(mut xs: I) { 
    xs.next().unwrap().pow(2); 
} 

Ayrıca özellik yerleştirebilirsiniz ilişkili tip kendisi

fn somefunc<I: Iterator>(mut xs: I) 
where 
    I::Item: Int, 
{ 
    xs.next().unwrap().pow(2); 
} 
üzerinde sınırları
İlgili konular