Rust - 创建过滤谓词作为函数
Rust - create filter predicate as function
我想创建一个 returns 谓词的函数。
我有一个矢量,我想根据字符过滤特定字符。我的代码:
let n = 0; // Irrelevant. This will change
co2 = co2
.into_iter()
.filter(|&binary| binary.chars().collect::<Vec<char>>().get(n).unwrap() == &'1')
.collect();
我有几个想要匹配的角色。我的意图是创建一个这样的函数:
fn create_predicate(character: char, n: usize) -> impl FnMut(&str) {
move |x: &str| {
return x.chars().collect::<Vec<char>>().get(n).unwrap() == &character;
}
}
co2 = co2.filter(create_predicate('q', n));
这行不通,但我想让它看起来像那样
所以我想要一个函数来创建一个谓词,我可以在我的过滤器中使用它。我该怎么做?
如果没有完整的 minimal reproducible example,很难给出完整的答案,但您可以通过对代码进行两处更改来接近答案:
- 谓词必须return
bool
才能在filter
. 中使用
- 可能,谓词必须取
&&str
.
工作示例:
fn create_predicate(character: char, n: usize) -> impl FnMut(&&str) -> bool {
move |x: &&str| {
return x.chars().collect::<Vec<char>>().get(n).unwrap() == &character;
}
}
fn main() {
let co2 = [ "azerty", "foo", "bar" ];
let co2 = co2.iter().copied().filter(create_predicate('q', 1));
}
我想创建一个 returns 谓词的函数。
我有一个矢量,我想根据字符过滤特定字符。我的代码:
let n = 0; // Irrelevant. This will change
co2 = co2
.into_iter()
.filter(|&binary| binary.chars().collect::<Vec<char>>().get(n).unwrap() == &'1')
.collect();
我有几个想要匹配的角色。我的意图是创建一个这样的函数:
fn create_predicate(character: char, n: usize) -> impl FnMut(&str) {
move |x: &str| {
return x.chars().collect::<Vec<char>>().get(n).unwrap() == &character;
}
}
co2 = co2.filter(create_predicate('q', n));
这行不通,但我想让它看起来像那样
所以我想要一个函数来创建一个谓词,我可以在我的过滤器中使用它。我该怎么做?
如果没有完整的 minimal reproducible example,很难给出完整的答案,但您可以通过对代码进行两处更改来接近答案:
- 谓词必须return
bool
才能在filter
. 中使用
- 可能,谓词必须取
&&str
.
工作示例:
fn create_predicate(character: char, n: usize) -> impl FnMut(&&str) -> bool {
move |x: &&str| {
return x.chars().collect::<Vec<char>>().get(n).unwrap() == &character;
}
}
fn main() {
let co2 = [ "azerty", "foo", "bar" ];
let co2 = co2.iter().copied().filter(create_predicate('q', 1));
}