Types 返回类型,而不是实例

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

Rust中是否有一种方法可以从函数返回实现特定特征的类型(我不想要实例,而是类型)。类似这样的内容(在当前形式下不起作用):


最接近您要求的是工厂函数:

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)
}