汎用構造体を返したいと思います。私は実際の実装の出力を標準に従って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,
}
}
}
エラー:
error[E0423]: expected value, found type parameter `R`
--> src/main.rs:10:21
|
10 | reader: R,
| ^not a value
error[E0423]: expected value, found type parameter `W`
--> src/main.rs:11:21
|
11 | writer: W,
| ^not a value
error[E0601]: main function not found
error[E0194]: type parameter `R` shadows another type parameter of the same name
--> src/main.rs:8:16
|
7 | impl<R, W> Sender<R, W> {
| - first `R` declared here
8 | pub fn new<R, W>(reader: R, writer: W) -> Sender<R, W> {
| ^shadows another type parameter
error[E0194]: type parameter `W` shadows another type parameter of the same name
--> src/main.rs:8:19
|
7 | impl<R, W> Sender<R, W> {
| - first `W` declared here
8 | pub fn new<R, W>(reader: R, writer: W) -> Sender<R, W> {
| ^shadows another type parameter
これは私には理にかなって、それはR
の具体的な種類を知りません。でも、私はことを解決できない関数で、一般的なパラメータを与えて考え出したが、それは、この追加のエラー与える:new<R, W>
ので動作しません
34 | impl<R, W> Sender<R, W> {
| - first `R` declared here
35 | pub fn new<R, W>(reader: R, writer: W) -> Sender<R, W> {
| ^shadows another type parameter
を宣言し異なる(ただし、同じ名前!)R
とW
。
私は2つの異なるnew
関数を作成する必要はありませんが、メモリ読み書き用とSTDIN読み書き用の2つの方法がありますか?