有了 Rust 特征,我可以表达一个Monoid
类型类(请原谅我对方法的命名):
trait Monoid {
fn append(self, other: Self) -> Self;
fn neutral() -> Self;
}
Run Code Online (Sandbox Code Playgroud)
然后,我还可以实现字符串或整数的特征:
impl Monoid for i32 {
fn append(self, other: i32) -> i32 {
self + other
}
fn neutral() -> Self { 0 }
}
Run Code Online (Sandbox Code Playgroud)
但是,我现在如何i32
为乘法案例添加另一个实现呢?
impl Monoid for i32 {
fn append(self, other: i32) -> i32 {
self * other
}
fn neutral() { 1 }
}
Run Code Online (Sandbox Code Playgroud)
我尝试了类似于功能中所做的事情,但该解决方案似乎依赖于特征上的附加类型参数,而不是用于Self
元素,这给了我一个警告。
首选的解决方案是使用标记特征进行操作 - 我也尝试过但没有成功。