Generics 从新文件返回泛型结构

Generics 从新文件返回泛型结构,generics,rust,Generics,Rust,我想返回一个泛型结构。我的想法是,我希望按照标准将实际实现输出到STDIN,但出于测试目的,我希望用向量或其他东西来替换它,以便可以轻松地测试输出。到目前为止,我的解决方案是: #[derive(Debug)] pub struct Sender<R, W> { pub reader: R, pub writer: W, } #[derive(Debug)] pub struct Sender<R, W> { pub reader: R,

我想返回一个泛型结构。我的想法是,我希望按照标准将实际实现输出到STDIN,但出于测试目的,我希望用向量或其他东西来替换它,以便可以轻松地测试输出。到目前为止,我的解决方案是:

#[derive(Debug)]
pub struct Sender<R, W> {
    pub reader: R,
    pub writer: W,
}

#[derive(Debug)]
pub struct Sender<R, W> {
    pub reader: R,
    pub writer: W,
}

impl<R, W> Sender<R, W> {
    pub fn new<R, W>(reader: R, writer: W) -> Sender<R, W> {
        Sender {
            reader: R,
            writer: W,
        }
    }
}
这不起作用,因为
new
声明了不同的(但名称相同!)
R
W


有没有一种方法不需要我创建两个不同的
新的
函数,一个用于内存读/写,另一个用于STDIN读/写?

我想你可能误解了初始化结构所用的语法-就目前的情况而言,您的函数试图将结构的
读写器
写写器
字段设置为
R
W
,而不是您要传递的参数

应该是这样的:

impl<R, W> Sender<R, W> {
    pub fn new(reader: R, writer: W) -> Sender<R, W> {
        Sender {
            reader: reader, // field name on the left, value on the right
            writer: writer,
        }
    }
}
impl发送器{
发布fn新(读者:R,作者:W)->发件人{
寄件人{
reader:reader,//左边是字段名,右边是值
作者:作者,,
}
}
}
因为struct字段和参数具有相同的名称:

impl发送器{
发布fn新(读者:R,作者:W)->发件人{
发送者{读者,作者}
}
}
如果你还没有读过,我建议你读一读——它涵盖了所有这些东西

impl<R, W> Sender<R, W> {
    pub fn new(reader: R, writer: W) -> Sender<R, W> {
        Sender { reader, writer }
    }
}