Types 返回类型,而不是实例
Rust中是否有一种方法可以从函数返回实现特定特征的类型(我不想要实例,而是类型)。类似这样的内容(在当前形式下不起作用):Types 返回类型,而不是实例,types,return,rust,traits,Types,Return,Rust,Traits,Rust中是否有一种方法可以从函数返回实现特定特征的类型(我不想要实例,而是类型)。类似这样的内容(在当前形式下不起作用): 最接近您要求的是工厂函数: fn from_name(name: &str) -> Box<Fn(i64) -> Box<MyTrait>> { match name { "X" => Box::new(|x| Box::new(X{x: x})), "Y" => Box::n
最接近您要求的是工厂函数:
fn from_name(name: &str) -> Box<Fn(i64) -> Box<MyTrait>> {
match name {
"X" => Box::new(|x| Box::new(X{x: x})),
"Y" => Box::new(|x| Box::new(Y{x: x})),
_ => panic!("Unknown name"),
}
}
fn example() -> i64 {
let factory = from_name("X");
let z = factory(10);
z.sum(10)
}
fn from_name(name:&str)->Box>{
匹配名称{
“X”=>Box::new(| X | Box::new(X{X:X})),
“Y”=>Box::new(|x | Box::new(Y{x:x})),
_=>恐慌!(“未知名称”),
}
}
fn示例()->i64{
let factory=从_名称(“X”);
设z=工厂(10);
z、 总数(10)
}
from_name
返回一个返回对象的函数。NB,您可以通过枚举(例如enum Maker{X,Y}
从from_name
返回的使用fn make(&self,i64)->Value等方法,不必使用闭包,甚至可能不必使用框
trait对象来执行此操作,其中枚举值{X(X),Y(Y)}
。
fn from_name(name: &str) -> Box<Fn(i64) -> Box<MyTrait>> {
match name {
"X" => Box::new(|x| Box::new(X{x: x})),
"Y" => Box::new(|x| Box::new(Y{x: x})),
_ => panic!("Unknown name"),
}
}
fn example() -> i64 {
let factory = from_name("X");
let z = factory(10);
z.sum(10)
}