2016-12-30 59 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(); 
}