На этот вопрос уже есть ответ:
В частности, я хотел бы использовать либо 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
На этот вопрос уже есть ответ:
В частности, я хотел бы использовать либо 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ржавчина, черты, ржавчины,