3
在Rust中有一種方法可以返回一個實現某個函數的特定類型(我不想要實例,但是類型)。像這樣的東西(不以目前的形式工作):返回一個類型,而不是一個實例
trait MyTrait {
fn sum(&self, val: i64) -> i64;
}
#[derive(Debug)]
struct X {
x: i64,
}
impl MyTrait for X {
fn sum(&self, val: i64) -> i64 {
self.x + 2 * val
}
}
#[derive(Debug)]
struct Y {
x: i64,
}
impl MyTrait for Y {
fn sum(&self, val: i64) -> i64 {
self.x + 3 * val
}
}
fn from_name(name: &str) -> MyTrait {
match name {
"X" => X,
"Y" => Y,
_ => panic!("Unknown name")
}
}
fn main() {
let x = X{x: 21};
let y = Y{x: 42};
// This does not work, it is just to show the idea
let z = from_name("X"){x: 10};
println!("x {:?}", x.sum(3));
println!("y {:?}", y.sum(3));
println!("z {:?}", z.sum(3));
}
注意,您可以在不需要關閉的情況下執行此操作,甚至可能不需要通過枚舉等「盒」特徵對象。 'enum Maker {X,Y}'由'from_name'返回,其方法類似於'fn make(&self,i64) - > Value',其中'枚舉值{X(X),Y(Y)}'。 –
huon