[英]how could i use @ character as a Rust decorator to implement trait to a struct?
如果可能的話,我如何使用帶有 @ 字符的裝飾器來獲得 python 風格的味道,同時在我的結構上實現特征?
trait Animal {
fn get_name(&self) -> &str {
&self.name
}
}
trait Felidae {
fn to_claw(&self) -> &str;{
println!("i can scratch off !");
}
}
struct Dog {
name: String,
}
struct Cat {
name: String,
}
@Animal
Dog
@Animal,Felidae
Cat
如果可能的話,我如何使用帶有 @ 字符的裝飾器來獲得 python 風格的味道,同時在我的結構上實現特征?
Rust 不是 Python,Rust 不使用@
字符或運行時裝飾。 然而,正如 zgerd 指出的那樣,您可以定義自定義派生,它可以讓您編寫類似的東西
#[derive(Animal)]
struct Dog {...}
在這種情況下,我高度質疑它的價值,因為實現並不完全繁瑣:
trait Animal {
fn get_name(&self) -> &str;
}
trait Felidae {
fn to_claw(&self) {
println!("i can scratch off !");
}
}
struct Dog {
name: String,
}
impl Animal for Dog {
fn get_name(&self) -> &str { &self.name }
}
struct Cat {
name: String,
}
impl Animal for Cat {
fn get_name(&self) -> &str { &self.name }
}
impl Felidae for Cat {}
最多,對於這樣一個簡單的特征,你會編寫一個基本的聲明性宏:
macro_rules! animal_impl {
($t: ty) => {
impl Animal for $t {
fn get_name(&self) -> &str { &self.name }
}
}
}
animal_impl!{Dog}
animal_impl!{Cat}
這就是大多數標准庫為減少樣板文件所做的事情,盡管我什至不會打擾,除非您需要在六種左右的良好類型上實現這種自相似的實現。
另請注意,您的Animal
特征定義不正確,只需嘗試編譯它就會告訴您(即使沒有實現它):字段不是特征中的有效概念。
此外,這看起來像是某種偽 OO 層次結構的東西,這可能是個壞主意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.