Я пытаюсь перенести программу C на Rust. В C у меня есть это утверждение.
bytes = write(filedevice, cmd, (ssize_t)LEN_SET_ADDRESS_AREA);
Пробовал писать так, но компилятор выдает ошибку no method named `write` found for enum `Result` in the current scope . Как я могу исправить этот код, не используя небезопасный Rust?
let path = Path::new(DEVICE);
let memory = vec![0; DIM_MEM];
let mut filedevice = File::create(_path);
let file_wr = fildevice.write(&_memory[0]);





std::fs::File::create() возвращает Result<File>, поэтому вам нужно выполнить обработку ошибок перед доступом к внутреннему File объекту.
Быстрый и грязный способ — вызвать std::result::Result::unwrap(), чтобы развернуть возвращаемое значение.
let mut file = File::create(path).unwrap();
file.write(buffer);
Обратите внимание, что это вызывает панику в программе, если возвращаемое значение Result<File> является ошибкой. Прочитайте главу об обработке ошибок в книге Rust или документацию на уровне модуля для std::result, чтобы узнать о других способах правильной обработки ошибки. Вот некоторые примеры:
Использование .expect()
Это дает возможность печатать настраиваемые сообщения об ошибках.
let mut file = File::create(path).expect("Failed to create file");
file.write(buffer);
Использование match
Поскольку Result<T, E> является типом перечисления, мы можем использовать выражение match для сопоставления с образцом и обрабатывать оба случая в отдельных ветвях.
let mut file = match File::create(path) {
Ok(file) => file,
Err(error) => {
// panic, or you may also want to handle it in other ways
panic!("Problem creating file: {:?}", error);
}
};
file.write(buffer);
Аналогичный вопрос: stackoverflow.com/q/29214963/5397009