Rust 具有Into<;的多个泛型;PathBuf>;
我正在为我的游戏引擎开发一个资产管理器 以下是代码的简化版本:Rust 具有Into<;的多个泛型;PathBuf>;,rust,Rust,我正在为我的游戏引擎开发一个资产管理器 以下是代码的简化版本: trait Animal { fn create<P>(name: P) -> Self where P: Into<PathBuf>; } struct Dog; impl Animal for Dog { fn create<P>(name: P) -> Self where P: Into<PathBuf&
trait Animal {
fn create<P>(name: P) -> Self
where
P: Into<PathBuf>;
}
struct Dog;
impl Animal for Dog {
fn create<P>(name: P) -> Self
where
P: Into<PathBuf>
{
Self {}
}
}
fn create_animal<A, P>(name: P) -> A
where
P: Into<PathBuf>,
A: Animal,
{
A::create(name)
}
现在调用此函数的唯一方法是显式传递这两种类型:
let dog = create_animal::<Dog, &str>("Spike"); // This code is correct
let dog=create_animal::(“Spike”);//这个代码是正确的
我想知道是否有任何方法可以在不显式传递其类型(如第一个示例中)的情况下将Into与任何其他trait绑定一起使用。您可以使用
\u
保留第二个未指定的类型:
let dog = create_animal::<Dog, _>("Spike");
您可以使用
\u
将第二种类型保留为未指定:
let dog = create_animal::<Dog, _>("Spike");
出于好奇,您是否需要
create\u animal
factory功能?有没有多余的东西是你忽略掉的?是否需要将P
作为类型参数?为什么不使用&str
作为name
的类型?@Dai,在一般情况下,路径作为P:AsRef
传递。OP没有做到这一点,但尝试了与P:Into
类似的方法,但是一般来说,添加类型参数可以使其更通用。比如,如果我已经在使用PathBuf
建立指向某个对象的路径并在目录上迭代,我肯定不想用它创建&str
。@BrendanWilson,它实际上是AssetManager
结构的一种方法。所以它里面有一些额外的东西,比如缓存和验证。出于好奇,你需要create\u animal
工厂功能吗?有没有多余的东西是你忽略掉的?是否需要将P
作为类型参数?为什么不使用&str
作为name
的类型?@Dai,在一般情况下,路径作为P:AsRef
传递。OP没有做到这一点,但尝试了与P:Into
类似的方法,但是一般来说,添加类型参数可以使其更通用。比如,如果我已经在使用PathBuf
建立指向某个对象的路径并在目录上迭代,我肯定不想用它创建&str
。@BrendanWilson,它实际上是AssetManager
结构的一种方法。所以它里面有一些额外的东西,比如缓存和验证。
let dog: Dog = create_animal("Spike");