我仍然相当新的生锈。 我想用一个变量的几个函数返回不同类型的结构之一之间选择,但所有这些都具有相同的特征来实现。 那么我想从所选择的功能将返回的结构来一些功能,这意味着接受其具有特质的任何变量。 然而,我无法弄清楚如何做到这一点。 我读过如何克服不兼容的类型实现同一性状结构相匹配的武器? 但我失去了一些东西,因为我仍然无法得到它的工作。 我将返回的值不接受值的函数 - 见下文。
下面是使用的从上面的链接的方法的一个简化的例子:
trait IsEven {
fn is_even(&self) -> bool;
}
struct First {
v: u8,
}
impl IsEven for First {
fn is_even(&self) -> bool {
self.v % 2 == 0
}
}
struct Second {
v: Vec<u8>,
}
impl IsEven for Second {
fn is_even(&self) -> bool {
self.v[0] % 2 == 0
}
}
fn make1() -> First {
First{v: 5}
}
fn make2() -> Second {
Second{v: vec![2, 3, 5]}
}
fn requires_is_even(v: impl IsEven) {
println!("{:?}", v.is_even());
}
fn main() {
for i in 0..2 {
let v1;
let v2;
let v = match i {
0 => {
v1 = make1();
&v1 as &IsEven
}
_ => {
v2 = make2();
&v2 as &IsEven
}
};
requires_is_even(v); // This is where it fails
}
}
我在这种情况下得到的错误是:
52 | requires_is_even(v);
| ^^^^^^^^^^^^^^^^ the trait `IsEven` is not implemented for `&dyn IsEven`
我已经使用盒作为一些在上面的链接的其他例子也试过,但仍无法得到它的工作。 任何人都可以帮忙吗?
谢谢
短发