我有两种方法的特质。实现该特征的一些(但不是全部)结构具有以下方法之一的所有相同实现:
trait Blabla {
fn xy(self, x: u32, y: u32) -> u32;
}
// ---------------------------------
struct Ding {}
impl Blabla for Ding {
fn xy(self, x: u32, y: u32) -> u32 {
x + y
}
}
// ---------------------------------
struct Dong {
dong_attribute: u32,
}
impl Dong {
fn get_1(self) -> u32 {
1
}
}
impl Blabla for Dong {
fn xy(self, x: u32, y: u32) -> u32 {
x + y + self.get_1()
}
}
// ---------------------------------
struct Dung {
dung_attribute: f32,
}
impl Dung {
fn get_1(self) -> u32 {
1
}
}
impl Blabla for Dung {
fn xy(self, x: u32, y: u32) -> u32 {
x + y + self.get_1()
}
}
该示例中有三个结构,每个结构都实现Blabla
特性,其中两个结构以完全相同的方式实现xy
方法。
有没有办法让他们共享该功能的代码?
我在想第二个特征,它继承自Blabla
并提供xy
作为该特征的默认实现,例如:
trait Blabla {
fn xy(self, x: u32, y: u32) -> u32;
}
// ----------------------------------
trait Blubblub: Blabla {
fn get_1(self) -> u32;
fn xy(self, x: u32, y: u32) -> u32 {
x + y + self.get_1()
}
}
// ---------------------------------
struct Ding {}
impl Blabla for Ding {
fn xy(self, x: u32, y: u32) -> u32 {
x + y
}
}
// ---------------------------------
struct Dong {
dong_attribute: u32,
}
impl Blubblub for Dong {
fn get_1(self) -> u32 {
1
}
}
// ---------------------------------
struct Dung {
dung_attribute: f32,
}
impl Blubblub for Dung {
fn get_1(self) -> u32 {
1
}
}
fn main() {
let x = Dung {
dung_attribute: 1.0,
};
println!{"{}", x.xy(1,1)};
}
这是行不通的,因为Rust中的特征继承意味着两个特征都需要实现,因此并不能避免我在Blabla::xy
的实现中为Dong
输入相同的代码和Dung
。
答案 0 :(得分:4)
使用public sealed class CustomJsonSerializer : JsonSerializer
{
public CustomJsonSerializer()
{
DateFormatString = "yyyy-MM-dd";
// ... other formatting stuff ...
}
}
的默认实现实施JsonSerializer
,您的示例可以正常工作
NancyBootStrapper