2016-12-30 11 views
1

私はこのような何かをやろうとしているが、それはinspectの閉鎖引数にコンパイルに失敗します。クロージャ引数のタイプを指定するにはどうすればよいですか?

fn main() { 
    vec!(1, 2, 3, 4) 
     .windows(2) 
     .inspect(|&&a[]| println!("{} {}", a[0], a[1])) 
     .count(); 
} 

私は周りのスライス名aを移動しようとしましたが、スイートスポットを見つけることができませんでしたコンパイラの理解の

+2

'inspect(| a | ...) 'に問題はありませんか? –

+0

ありがとう、それは働いている!それはとても簡単です、私は本当に複雑すぎます。 – user7357536

答えて

3

直接の答えはあなたが引数を定義だけで他のどこでも同じように、コロンを使用することですが入力します。

fn main() { 
    vec!(1, 2, 3, 4) 
     .windows(2) 
     .inspect(|a: &&[u8]| println!("{} {}", a[0], a[1])) 
     .count(); 
} 

をマチューMで指摘したように、全くタイプとして、ここで型を指定する理由はありません推論は、それを処理します。そうすることは閉鎖体のために、中括弧を必要とするが

fn main() { 
    vec!(1, 2, 3, 4) 
     .windows(2) 
     .inspect(|a| println!("{} {}", a[0], a[1])) 
     .count(); 
} 

を完全にするために、あなたはまた、クロージャの戻り値の型を指定することができます。これもまれです。

fn main() { 
    vec!(1, 2, 3, 4) 
     .windows(2) 
     .map(|a: &[u8]| -> bool { a[0] % 2 == 0 }) 
     .inspect(|a| println!("{}", a)) 
     .count(); 
} 
関連する問題