Как я могу вернуть значение, которое использует признак как тип / интерфейс? [Дубликат]

В частности, я хотел бы использовать либо io::stdin()или в File::open()качестве io::Read.

Я новичок в Rust и может отсутствовать некоторые понятия, но я не могу найти никакой документации о том, как вернуть структуру, содержащую признак.

Пример того, чего я пытаюсь достичь:

use std::io::{self, Error};
use std::fs::File;

struct Config<T: io::Read> {
    source: T,
    dest: T,
}

impl<T> Config<T>
where
    T: io::Read,
{
    fn new(args: &[String]) -> Result<Config, Box<Error>> {
        if args.len() == 1 {
            Ok(Config {
                source: io::stdin(),
                dest: io::stdout(),
            })
        } else if args.len() == 2 {
            Ok(Config {
                source: File::open(args[1])?,
                dest: io::stdout(),
            })
        }
    }
}

fn main() {
    let mut config = Config::new(&[""]);
}

Это дает мне следующую ошибку:

error[E0243]: wrong number of type arguments: expected 1, found 0
  --> src/main.rs:13:39
   |
13 |     fn new(args: &[String]) -> Result<Config, Box<Error>> {
   |                                       ^^^^^^ expected 1 type argument

rust,traits,rust,

0

Ответов: 0

Как я могу вернуть значение, которое использует признак как тип / интерфейс? [Дубликат]

В частности, я хотел бы использовать либо io::stdin()или в File::open()качестве io::Read.

Я новичок в Rust и может отсутствовать некоторые понятия, но я не могу найти никакой документации о том, как вернуть структуру, содержащую признак.

Пример того, чего я пытаюсь достичь:

use std::io::{self, Error};
use std::fs::File;

struct Config<T: io::Read> {
    source: T,
    dest: T,
}

impl<T> Config<T>
where
    T: io::Read,
{
    fn new(args: &[String]) -> Result<Config, Box<Error>> {
        if args.len() == 1 {
            Ok(Config {
                source: io::stdin(),
                dest: io::stdout(),
            })
        } else if args.len() == 2 {
            Ok(Config {
                source: File::open(args[1])?,
                dest: io::stdout(),
            })
        }
    }
}

fn main() {
    let mut config = Config::new(&[""]);
}

Это дает мне следующую ошибку:

error[E0243]: wrong number of type arguments: expected 1, found 0
  --> src/main.rs:13:39
   |
13 |     fn new(args: &[String]) -> Result<Config, Box<Error>> {
   |                                       ^^^^^^ expected 1 type argument
00ржавчина, черты, ржавчины,
Похожие вопросы
Яндекс.Метрика