作为学习 Rust 的借口,我正在编写遗传算法的代码,之后会编写遗传编程的代码。
我声明了一个用于变异操作的 trait:
我声明了一个用于变异操作的 trait:
pub trait Mutator<IndvidualType> {
fn mutate(&self, individual: &IndvidualType) -> IndvidualType;
}
对于每个IndividualType
来说,实现trait非常容易,但我想要更通用的trait,适用于每个列表(向量)类型的基因组,比如:
pub trait HasVectorGenome<IndividualType, BaseType> {
fn new_from_vec(genome: Vec<BaseType>) -> IndvidualType;
fn get_vec(&self) -> Vec<BaseType>;
}
我希望有一个通用的变异器,可以变异每一个实现了Rand
接口的HasVectorGenome
的BaseType
(以便能够生成新的随机值)。类似于:
struct GeneralMutator;
impl<B, T> Mutator<T> for GeneralMutator
where T: HasVectorGenome<T, B>,
B: Rand
{
fn mutate(&self, individual: &T) -> T {
let genome: Vec<B> = individual.get_vec();
genome[0] = rand::random::<B>();
T::new_from_vec(genome)
}
}
我遇到了错误 类型参数`B`没有通过实现特质、自身类型或谓词进行限制
,导致编译失败。我不知道该如何正确表达这个问题。