你可以从trait中实现的trait静态方法调用一个trait静态方法吗?例如:
trait SqlTable {
fn table_name() -> String;
fn load(id: i32) -> Something {
...
Self::table_name() // <-- this is not right
...
}
}
这是现在的工作感谢克里斯和Arjan(见下面的评论/答案)
fn main() {
let kiwibank = SqlTable::get_description(15,None::<Account>);
}
trait SqlTable {
fn table_name(_: Option<Self>) -> String;
fn get_description(id: i32, _: Option<Self>) -> String {
println!("Fetching from {} table", SqlTable::table_name(None::<Self>) );
String::from_str("dummy result")
}
}
struct Account {
id: i32,
name: String,
}
impl SqlTable for Account {
fn table_name(_: Option<Account>) -> String { String::from_str("account") }
}
3条答案
按热度按时间eiee3dmh1#
您必须将Self更改为SqlTable:
静态方法总是在SomeTrait::some_method()这样的trait上调用。Bug #6894涵盖了这个问题。
j9per5c42#
SomeTrait::some_method()
这样的trait上调用。_: Option<Self>
并将其传递给None::<T>
。查看原始问题了解(截至今天)编译的代码。
n3ipq98p3#
这在当前Rust(使用1.65.0验证)中无需任何变通方法即可工作: