我正在尝试将具有不同参数的函数添加到向量中。
fn f1() {
println!("Hello, World!");
}
fn f2(s: &str) -> String {
String::from(s)
}
fn f3(i: i32) {
println!("{}", i);
}
fn main() {
let v = vec![f1, f3, f2];
}
但这给出了错误:
error[E0308]: mismatched types --> src/main.rs:12:22 | 12 | let v = vec![f1, f3, f2]; | ^^ incorrect number of function parameters | = note: expected type `fn() {f1}` found fn item `fn(i32) {f3}`
有什么办法可以使我工作?
发生错误是因为向量仅用于保存同类数据,即向量的每个元素都必须具有相同的类型。为了解决这个问题,您可以例如使用枚举向量:
enum E {
F1(fn()),
F2(fn(&str) -> String),
F3(fn(i: i32)),
}
fn f1() {
println!("Hello, World!");
}
fn f2(s: &str) -> String {
String::from(s)
}
fn f3(i: i32) {
println!("{}", i);
}
fn main() {
let v = vec![E::F1(f1), E::F3(f3), E::F2(f2)];
for func in v {
match func {
E::F1(f) => f(),
E::F2(f) => println!("{}", f("foo")),
E::F3(f) => f(2),
}
}
}
输出量
Hello, World! 2 foo
或者,您可以使用专门用于存储异构数据的容器(也称为元组):
fn main() {
let v = (f1, f3, f2);
v.0();
v.1(2);
println!("{}", v.2("foo"));
}
输出量
Hello, World! 2 foo
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句