Rust 如何在没有结构实例的情况下调用trait方法?
如果我有一个结构,其方法没有将Rust 如何在没有结构实例的情况下调用trait方法?,rust,Rust,如果我有一个结构,其方法没有将self作为参数,我可以通过SomeStruct::method()调用该方法。对于一个从特性定义的方法,我似乎做不到同样的事情。例如: trait SomeTrait { fn one_trait() -> uint; } struct SomeStruct; impl SomeStruct { fn one_notrait() -> uint { 1u } } impl SomeTrait for SomeS
self
作为参数,我可以通过SomeStruct::method()
调用该方法。对于一个从特性定义的方法,我似乎做不到同样的事情。例如:
trait SomeTrait {
fn one_trait() -> uint;
}
struct SomeStruct;
impl SomeStruct {
fn one_notrait() -> uint {
1u
}
}
impl SomeTrait for SomeStruct {
fn one_trait() -> uint {
1u
}
}
#[test]
fn testing() {
SomeStruct::one_trait(); // doesn't compile
SomeStruct::one_notrait(); // compiles
}
编译器给出错误“未解析名称'SomeStruct::one_trait.”
如何直接调用trait方法的结构实现?我认为这目前是不可能的。问题是您不能显式指定
Self
类型。但管道中有一个活动的接口,在实现时应该允许这样做
同时,你可以这样处理它:
trait SomeTrait {
fn one_trait(&self) -> uint;
}
struct Static<T>;
struct SomeStruct;
impl SomeTrait for Static<SomeStruct> {
fn one_trait(&self) -> uint { 1 }
}
fn main() {
let type_to_uint = Static::<SomeStruct>.one_trait();
println!("{}", type_to_uint);
}
trait sometracit{
fn一种特质(自我)->uint;
}
结构静态;
struct SomeStruct;
将某些特性应用于静态{
fn一个特征(自我)->uint{1}
}
fn main(){
让type_to_uint=Static::.one_trait();
println!(“{}”,键入_-to _-uint);
}
这就是我如何将一个类型映射到一个整数(如果你想要的是整数的话)。这是在没有类型为T
的值的情况下完成的。虚拟值,Static
,大小为零。trait Animal{
fn baby_name()->字符串;
}
结构狗;
植入狗{
fn baby_name()->字符串{
字符串::from(“Spot”)
}
}
为狗准备的动物{
fn baby_name()->字符串{
字符串::from(“puppy”)
}
}
fn main(){
println!(“小狗被称为{},::baby_name());
}
从可能的重复(它不是精确的重复,但它肯定涵盖了相同的基础,并且答案是,在UFCS实现之前,如果没有解决方法,您就无法执行此操作。)“不编译”变量的错误消息是什么?(最好包含精确的编译器输出,这样每个人都在同一页上。:)当然。我将编辑问题以添加编译器错误。Chris的答案仍然有效。目前不可调用(直到UFCS登陆)@PureW:RFC被拒绝,因此文件被删除:x