Как я могу использовать декоратор с, если возможно, символом @, чтобы иметь вкус стиля python при реализации трейтов в моих структурах?
Rust не Python, Rust не используйте символ @
или украшение среды выполнения. Однако, как указывает zgerd, вы можете определить custom derives , что позволит вам написать что-то вроде
#[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 {}
Максимум , для такой простой черты вы должны написать базовый c декларативный макрос :
macro_rules! animal_impl {
($t: ty) => {
impl Animal for $t {
fn get_name(&self) -> &str { &self.name }
}
}
}
animal_impl!{Dog}
animal_impl!{Cat}
Это то, что делает большая часть стандартной библиотеки, чтобы уменьшить шаблон , хотя я бы даже не стал беспокоиться, если вам не нужна такая самоподобная реализация для добрых полдюжины типов или около того .
Также обратите внимание, что ваше определение признака Animal
неверно, и простая попытка его компиляции сказала бы вам (даже без его реализации): поля не являются допустимым понятием в чертах.
Также это похоже на какую-то псевдо-объектно-ориентированную иерархию, что, вероятно, плохая идея.