[英]How to call a trait method without a struct instance?
如果我有一個沒有self
作為參數的方法的結構,我可以通過SomeStruct::method()
調用該方法。 我似乎無法對從 trait 定義的方法做同樣的事情。 例如:
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
}
編譯器給出錯誤“unresolved name 'SomeStruct::one_trait.'”
如何直接調用結構的 trait 方法實現?
trait Animal {
fn baby_name() -> String;
}
struct Dog;
impl Dog {
fn baby_name() -> String {
String::from("Spot")
}
}
impl Animal for Dog {
fn baby_name() -> String {
String::from("puppy")
}
}
fn main() {
println!("A baby dog is called a {}", <Dog as Animal>::baby_name());
}
來自高級特質
我相信這目前是不可能的。 問題是您不能明確指定Self
類型。 但是管道中有一個活動的RFC ,在實施時應該允許這樣做。
與此同時,你可以像這樣解決它:
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);
}
這就是我將類型映射到整數的方式(如果這就是您所追求的)。 它是在沒有類型T
的值的情況下完成的。 虛擬值Static<T>
的大小為零。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.