gpt4 book ai didi

parameters - 有什么方法可以使采用解构数组的闭包?

转载 作者:行者123 更新时间:2023-11-29 08:26:11 26 4
gpt4 key购买 nike

我在做 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!!"));
}

最佳答案

没有。

函数参数是模式,这些模式必须始终是无可辩驳的。


使用 itertools,你可以这样做:

use itertools::Itertools;

fn main() {
let f = |s:&[u8]|s.iter().tuples().all(|(a,b)|a==b);
println!("{}", f(b"TThhiiss iiss ddoouubbllee ssppeeaakk!!"));
}

这是可行的,因为 tuples 将推断它恰好需要 2 个元素。如果有奇数个元素,最后一个将被忽略。

关于parameters - 有什么方法可以使采用解构数组的闭包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57529537/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com