【发布时间】:2019-08-16 18:34:02
【问题描述】:
我在做this code golf challenge,并想出了这个问题的解决方案:
fn main() {
let f = |s:&[u8]|s.chunks(2).all(|n|n[0]==n[1]);
println!("{}", f(b"TThhiiss iiss ddoouubbllee ssppeeaakk!!"));
}
此解决方案有效,但我认为 n[0]==n[1] 看起来不太优雅,并尝试了类似:
fn main() {
let f = |s:&[u8]|s.chunks(2).all(|[a,b]|a==b);
println!("{}", f(b"TThhiiss iiss ddoouubbllee ssppeeaakk!!"));
}
但这失败并出现错误:
error[E0005]: refutable pattern in function argument: `&[]` not covered --> src/main.rs:2:39 | 2 | let f = |s:&[u8]|s.chunks(2).all(|[a,b]|a==b); | ^^^^^ pattern `&[]` not covered
有没有办法通过更改闭包参数来完成上述工作(其他一切都应保持原样):
fn main() {
let f = |s:&[u8]|s.chunks(2).all(|/* anything here */|a==b);
println!("{}", f(b"TThhiiss iiss ddoouubbllee ssppeeaakk!!"));
}
【问题讨论】:
标签: parameters rust pattern-matching closures