Как получить доступ к as_secs в системном времени? - PullRequest
3 голосов
/ 26 сентября 2019

Это мой первый день с Rust Language.Возможно, это общий вопрос о доступе.

Я использую std::time::SystemTime.Моя цель - создать структуру с полем с именем timestamp и сохранить там время в секундах.

Я видел этот пример, который работает правильно:

use std::time::SystemTime;

match SystemTime::now().duration_since(SystemTime::UNIX_EPOCH) {
    Ok(n) => println!("1970-01-01 00:00:00 UTC was {} seconds ago!", n.as_secs()),
    Err(_) => panic!("SystemTime before UNIX EPOCH!"),
}

Однако, когда я пытаюсь этот код, я получаю сообщение об ошибке:

use std::time::SystemTime;

let n = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH);
println!("{}", n.as_secs());
error[E0599]: no method named `as_secs` found for type `std::result::Result<std::time::Duration, std::time::SystemTimeError>` in the current scope

Что яделать неправильно?

1 Ответ

1 голос
/ 27 сентября 2019

Прочитайте ошибку:

no method named `...` found for type `Result<...>`

Итак, мы смотрим на Result:

Result - это тип, который представляет либо успех(Ok) или сбой (Err)

См. Модуль std::result для подробностей документации.

Итак, мы знаем, что SystemTime::duration_since(&self, _) возвращает Result, что означает, что он мог потерпеть неудачу.Чтение документов:

Возвращает Err, если earlier позже self, и ошибка содержит, как далеко от self времени.

Итак, нам просто нужно unwrap, expect или сопоставить его, чтобы получить возможность ошибки.

...