我有lib.rs:
pub mod genetics {
use std;
pub trait RandNewable {
fn new() -> Self;
}
pub trait Gene : std::fmt::Debug + Copy + Clone + RandNewable {}
#[derive(Debug, Copy, Clone)]
pub struct TraderGene {
cheat: bool,
}
impl RandNewable for TraderGene {
fn new() -> TraderGene {
TraderGene {
cheat: true,
}
}
}
#[derive(Debug)]
pub struct DNA<G: Gene> {
genes: [G; 3],
}
impl <G: Gene> DNA<G> {
pub fn create() -> DNA<G> {
DNA {
genes: [RandNewable::new(), RandNewable::new(), RandNewable::new()],
}
}
pub fn mutate(&self) -> DNA<G> {
let mut copy = self.genes;
copy[0] = RandNewable::new();
DNA {
genes: copy,
}
}
}
}我正在尝试使用main.rs中的定义:
extern crate trafficgame;
use trafficgame::genetics::{DNA, TraderGene, Gene, RandNewable};
fn main() {
let t1: DNA<TraderGene> = DNA::create();
let t2 = t1.mutate();
}但我有两个错误:
the trait `trafficgame::genetics::Gene` is not implemented for the type `trafficgame::genetics::TraderGene和
type `trafficgame::genetics::DNA<trafficgame::genetics::TraderGene>` does not implement any method in scope named `mutate`TraderGene确实实现了Gene特性,但似乎RandNewable的impl在主要范围内没有实现。另一个问题是,由于突变不是在一个特性中声明的,所以我不知道导入什么来引用变异。我组织得不对吗?
发布于 2015-06-07 21:26:43
即使您的Gene特性没有方法,TraderGene也不会自动实现它,即使它实现了Gene的所有超级特征。您必须在genetics模块中编写一个空的impl:
impl Gene for TraderGene {}https://stackoverflow.com/questions/30698544
复制相似问题