问题 I think this is something obvious I'm missing, but here goes.. use std::io; pub trait Source<'a, T> { fn push(&self, t: T) -> io::Result<()>; fn link(&mut self, sink: &dyn Sink<'a, T>) -> io::Result<()>; } pub trait Sink<'a, T> { fn push(&self, t: T) -> io::Result<()>; fn link(&mut self, source: &dyn Source<T>) -> io::Result<()>; } pub struct SyncSource<'a, T> { sink: Option<&'a dyn Sink<'a, T>>, } impl<'a, T> SyncSource<'a, T> { pub fn new() -> SyncSource<'a, T> { SyncSource { sink: None, }