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